--- 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',