1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
--- patches/ext-from-gh.patch
+++ patches/ext-from-gh.patch
@@ -7,7 +7,7 @@ index 1b0adc4..b595123 100644
- const galleryServiceUrl = productjson.extensionsGallery?.serviceUrl;
- return (galleryServiceUrl ? ext.fromMarketplace(galleryServiceUrl, extension) : ext.fromGithub(extension))
- .pipe(rename(p => p.dirname = `${extension.name}/${p.dirname}`));
-+ return ext.fromGithub(extension).pipe(rename(p => p.dirname = `${extension.name}/${p.dirname}`));
++ return ext.fromLocalVsix(extension).pipe(rename(p => p.dirname = `${extension.name}/${p.dirname}`));
}
diff --git a/build/lib/builtInExtensions.ts b/build/lib/builtInExtensions.ts
index fefed43..4ae553e 100644
@@ -18,5 +18,5 @@ index fefed43..4ae553e 100644
- const galleryServiceUrl = productjson.extensionsGallery?.serviceUrl;
- return (galleryServiceUrl ? ext.fromMarketplace(galleryServiceUrl, extension) : ext.fromGithub(extension))
- .pipe(rename(p => p.dirname = `${extension.name}/${p.dirname}`));
-+ return ext.fromGithub(extension).pipe(rename(p => p.dirname = `${extension.name}/${p.dirname}`));
++ return ext.fromLocalVsix(extension).pipe(rename(p => p.dirname = `${extension.name}/${p.dirname}`));
}
--- vscode/build/lib/extensions.js
+++ vscode/build/lib/extensions.js
@@ -4,6 +4,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
+exports.fromLocalVsix = fromLocalVsix;
exports.fromMarketplace = fromMarketplace;
exports.fromGithub = fromGithub;
exports.packageLocalExtensionsStream = packageLocalExtensionsStream;
@@ -21,6 +22,7 @@ const path = require("path");
const File = require("vinyl");
const stats_1 = require("./stats");
const util2 = require("./util");
+const vinylFs = require("vinyl-fs");
const vzip = require('gulp-vinyl-zip');
const filter = require("gulp-filter");
const rename = require("gulp-rename");
@@ -193,6 +195,20 @@ function fromLocalNormal(extensionPath) {
.catch(err => result.emit('error', err));
return result.pipe((0, stats_1.createStatsStream)(path.basename(extensionPath)));
}
+function fromLocalVsix({ name, version, metadata }) {
+ const json = require('gulp-json-editor');
+ fancyLog('Processing extension from local directory:', ansiColors.yellow(`${name}@${version}`), '...');
+ const packageJsonFilter = filter('package.json', { restore: true });
+ return vinylFs.src(`${root}/../${name}.${version}.vsix`)
+ .pipe(buffer())
+ .pipe(vzip.src())
+ .pipe(filter('extension/**'))
+ .pipe(rename(p => p.dirname = p.dirname.replace(/^extension\/?/, '')))
+ .pipe(packageJsonFilter)
+ .pipe(buffer())
+ .pipe(json({ __metadata: metadata }))
+ .pipe(packageJsonFilter.restore);
+}
const userAgent = 'VSCode Build';
const baseHeaders = {
'X-Market-Client-Id': 'VSCode Build',
--- vscode/build/lib/extensions.ts.orig
+++ vscode/build/lib/extensions.ts
@@ -13,6 +13,7 @@ import { Stream } from 'stream';
import * as File from 'vinyl';
import { createStatsStream } from './stats';
import * as util2 from './util';
+import * as vinylFs from 'vinyl-fs';
const vzip = require('gulp-vinyl-zip');
import filter = require('gulp-filter');
import rename = require('gulp-rename');
@@ -214,6 +215,24 @@ function fromLocalNormal(extensionPath: string): Stream {
return result.pipe(createStatsStream(path.basename(extensionPath)));
}
+export function fromLocalVsix({ name, version, metadata }: IExtensionDefinition): Stream {
+ const json = require('gulp-json-editor') as typeof import('gulp-json-editor');
+
+ fancyLog('Processing extension from local directory:', ansiColors.yellow(`${name}@${version}`), '...');
+
+ const packageJsonFilter = filter('package.json', { restore: true });
+
+ return vinylFs.src(`${root}/../${name}.${version}.vsix`)
+ .pipe(buffer())
+ .pipe(vzip.src())
+ .pipe(filter('extension/**'))
+ .pipe(rename(p => p.dirname = p.dirname!.replace(/^extension\/?/, '')))
+ .pipe(packageJsonFilter)
+ .pipe(buffer())
+ .pipe(json({ __metadata: metadata }))
+ .pipe(packageJsonFilter.restore);
+}
+
const userAgent = 'VSCode Build';
const baseHeaders = {
'X-Market-Client-Id': 'VSCode Build',
|