2024-09-11 02:37:36 +00:00
"use strict" ;
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Copyright ( c ) Microsoft Corporation . All rights reserved .
* Licensed under the MIT License . See License . txt in the project root for license information .
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- * /
2025-03-01 02:01:53 +00:00
var _ _createBinding = ( this && this . _ _createBinding ) || ( Object . create ? ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
var desc = Object . getOwnPropertyDescriptor ( m , k ) ;
if ( ! desc || ( "get" in desc ? ! m . _ _esModule : desc . writable || desc . configurable ) ) {
desc = { enumerable : true , get : function ( ) { return m [ k ] ; } } ;
}
Object . defineProperty ( o , k2 , desc ) ;
} ) : ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
o [ k2 ] = m [ k ] ;
} ) ) ;
var _ _setModuleDefault = ( this && this . _ _setModuleDefault ) || ( Object . create ? ( function ( o , v ) {
Object . defineProperty ( o , "default" , { enumerable : true , value : v } ) ;
} ) : function ( o , v ) {
o [ "default" ] = v ;
} ) ;
var _ _importStar = ( this && this . _ _importStar ) || ( function ( ) {
var ownKeys = function ( o ) {
ownKeys = Object . getOwnPropertyNames || function ( o ) {
var ar = [ ] ;
for ( var k in o ) if ( Object . prototype . hasOwnProperty . call ( o , k ) ) ar [ ar . length ] = k ;
return ar ;
} ;
return ownKeys ( o ) ;
} ;
return function ( mod ) {
if ( mod && mod . _ _esModule ) return mod ;
var result = { } ;
if ( mod != null ) for ( var k = ownKeys ( mod ) , i = 0 ; i < k . length ; i ++ ) if ( k [ i ] !== "default" ) _ _createBinding ( result , mod , k [ i ] ) ;
_ _setModuleDefault ( result , mod ) ;
return result ;
} ;
} ) ( ) ;
var _ _importDefault = ( this && this . _ _importDefault ) || function ( mod ) {
return ( mod && mod . _ _esModule ) ? mod : { "default" : mod } ;
} ;
2024-09-11 02:37:36 +00:00
Object . defineProperty ( exports , "__esModule" , { value : true } ) ;
exports . getExtensionStream = getExtensionStream ;
exports . getBuiltInExtensions = getBuiltInExtensions ;
2025-03-01 02:01:53 +00:00
const fs _1 = _ _importDefault ( require ( "fs" ) ) ;
const path _1 = _ _importDefault ( require ( "path" ) ) ;
const os _1 = _ _importDefault ( require ( "os" ) ) ;
const rimraf _1 = _ _importDefault ( require ( "rimraf" ) ) ;
const event _stream _1 = _ _importDefault ( require ( "event-stream" ) ) ;
const gulp _rename _1 = _ _importDefault ( require ( "gulp-rename" ) ) ;
const vinyl _fs _1 = _ _importDefault ( require ( "vinyl-fs" ) ) ;
const ext = _ _importStar ( require ( "./extensions" ) ) ;
const fancy _log _1 = _ _importDefault ( require ( "fancy-log" ) ) ;
const ansi _colors _1 = _ _importDefault ( require ( "ansi-colors" ) ) ;
const root = path _1 . default . dirname ( path _1 . default . dirname ( _ _dirname ) ) ;
const productjson = JSON . parse ( fs _1 . default . readFileSync ( path _1 . default . join ( _ _dirname , '../../product.json' ) , 'utf8' ) ) ;
2024-09-11 02:37:36 +00:00
const builtInExtensions = productjson . builtInExtensions || [ ] ;
const webBuiltInExtensions = productjson . webBuiltInExtensions || [ ] ;
2025-03-01 02:01:53 +00:00
const controlFilePath = path _1 . default . join ( os _1 . default . homedir ( ) , '.vscode-oss-dev' , 'extensions' , 'control.json' ) ;
2024-09-11 02:37:36 +00:00
const ENABLE _LOGGING = ! process . env [ 'VSCODE_BUILD_BUILTIN_EXTENSIONS_SILENCE_PLEASE' ] ;
function log ( ... messages ) {
if ( ENABLE _LOGGING ) {
2025-03-01 02:01:53 +00:00
( 0 , fancy _log _1 . default ) ( ... messages ) ;
2024-09-11 02:37:36 +00:00
}
}
function getExtensionPath ( extension ) {
2025-03-01 02:01:53 +00:00
return path _1 . default . join ( root , '.build' , 'builtInExtensions' , extension . name ) ;
2024-09-11 02:37:36 +00:00
}
function isUpToDate ( extension ) {
2025-03-01 02:01:53 +00:00
const packagePath = path _1 . default . join ( getExtensionPath ( extension ) , 'package.json' ) ;
if ( ! fs _1 . default . existsSync ( packagePath ) ) {
2024-09-11 02:37:36 +00:00
return false ;
}
2025-03-01 02:01:53 +00:00
const packageContents = fs _1 . default . readFileSync ( packagePath , { encoding : 'utf8' } ) ;
2024-09-11 02:37:36 +00:00
try {
const diskVersion = JSON . parse ( packageContents ) . version ;
return ( diskVersion === extension . version ) ;
}
catch ( err ) {
return false ;
}
}
function getExtensionDownloadStream ( extension ) {
2025-03-01 02:01:53 +00:00
let input ;
if ( extension . vsix ) {
input = ext . fromVsix ( path _1 . default . join ( root , extension . vsix ) , extension ) ;
}
2025-04-29 07:07:20 +00:00
else if ( productjson . extensionsGallery ? . serviceUrl ) {
input = ext . fromMarketplace ( productjson . extensionsGallery . serviceUrl , extension ) ;
}
else {
2025-03-01 02:01:53 +00:00
input = ext . fromGithub ( extension ) ;
}
return input . pipe ( ( 0 , gulp _rename _1 . default ) ( p => p . dirname = ` ${ extension . name } / ${ p . dirname } ` ) ) ;
2024-09-11 02:37:36 +00:00
}
function getExtensionStream ( extension ) {
// if the extension exists on disk, use those files instead of downloading anew
if ( isUpToDate ( extension ) ) {
2025-03-01 02:01:53 +00:00
log ( '[extensions]' , ` ${ extension . name } @ ${ extension . version } up to date ` , ansi _colors _1 . default . green ( '✔︎' ) ) ;
return vinyl _fs _1 . default . src ( [ '**' ] , { cwd : getExtensionPath ( extension ) , dot : true } )
. pipe ( ( 0 , gulp _rename _1 . default ) ( p => p . dirname = ` ${ extension . name } / ${ p . dirname } ` ) ) ;
2024-09-11 02:37:36 +00:00
}
return getExtensionDownloadStream ( extension ) ;
}
function syncMarketplaceExtension ( extension ) {
const galleryServiceUrl = productjson . extensionsGallery ? . serviceUrl ;
2025-03-01 02:01:53 +00:00
const source = ansi _colors _1 . default . blue ( galleryServiceUrl ? '[marketplace]' : '[github]' ) ;
2024-09-11 02:37:36 +00:00
if ( isUpToDate ( extension ) ) {
2025-03-01 02:01:53 +00:00
log ( source , ` ${ extension . name } @ ${ extension . version } ` , ansi _colors _1 . default . green ( '✔︎' ) ) ;
return event _stream _1 . default . readArray ( [ ] ) ;
2024-09-11 02:37:36 +00:00
}
2025-03-01 02:01:53 +00:00
rimraf _1 . default . sync ( getExtensionPath ( extension ) ) ;
2024-09-11 02:37:36 +00:00
return getExtensionDownloadStream ( extension )
2025-03-01 02:01:53 +00:00
. pipe ( vinyl _fs _1 . default . dest ( '.build/builtInExtensions' ) )
. on ( 'end' , ( ) => log ( source , extension . name , ansi _colors _1 . default . green ( '✔︎' ) ) ) ;
2024-09-11 02:37:36 +00:00
}
function syncExtension ( extension , controlState ) {
if ( extension . platforms ) {
const platforms = new Set ( extension . platforms ) ;
if ( ! platforms . has ( process . platform ) ) {
2025-03-01 02:01:53 +00:00
log ( ansi _colors _1 . default . gray ( '[skip]' ) , ` ${ extension . name } @ ${ extension . version } : Platform ' ${ process . platform } ' not supported: [ ${ extension . platforms } ] ` , ansi _colors _1 . default . green ( '✔︎' ) ) ;
return event _stream _1 . default . readArray ( [ ] ) ;
2024-09-11 02:37:36 +00:00
}
}
switch ( controlState ) {
case 'disabled' :
2025-03-01 02:01:53 +00:00
log ( ansi _colors _1 . default . blue ( '[disabled]' ) , ansi _colors _1 . default . gray ( extension . name ) ) ;
return event _stream _1 . default . readArray ( [ ] ) ;
2024-09-11 02:37:36 +00:00
case 'marketplace' :
return syncMarketplaceExtension ( extension ) ;
default :
2025-03-01 02:01:53 +00:00
if ( ! fs _1 . default . existsSync ( controlState ) ) {
log ( ansi _colors _1 . default . red ( ` Error: Built-in extension ' ${ extension . name } ' is configured to run from ' ${ controlState } ' but that path does not exist. ` ) ) ;
return event _stream _1 . default . readArray ( [ ] ) ;
2024-09-11 02:37:36 +00:00
}
2025-03-01 02:01:53 +00:00
else if ( ! fs _1 . default . existsSync ( path _1 . default . join ( controlState , 'package.json' ) ) ) {
log ( ansi _colors _1 . default . red ( ` Error: Built-in extension ' ${ extension . name } ' is configured to run from ' ${ controlState } ' but there is no 'package.json' file in that directory. ` ) ) ;
return event _stream _1 . default . readArray ( [ ] ) ;
2024-09-11 02:37:36 +00:00
}
2025-03-01 02:01:53 +00:00
log ( ansi _colors _1 . default . blue ( '[local]' ) , ` ${ extension . name } : ${ ansi _colors _1 . default . cyan ( controlState ) } ` , ansi _colors _1 . default . green ( '✔︎' ) ) ;
return event _stream _1 . default . readArray ( [ ] ) ;
2024-09-11 02:37:36 +00:00
}
}
function readControlFile ( ) {
try {
2025-03-01 02:01:53 +00:00
return JSON . parse ( fs _1 . default . readFileSync ( controlFilePath , 'utf8' ) ) ;
2024-09-11 02:37:36 +00:00
}
catch ( err ) {
return { } ;
}
}
function writeControlFile ( control ) {
2025-03-01 02:01:53 +00:00
fs _1 . default . mkdirSync ( path _1 . default . dirname ( controlFilePath ) , { recursive : true } ) ;
fs _1 . default . writeFileSync ( controlFilePath , JSON . stringify ( control , null , 2 ) ) ;
2024-09-11 02:37:36 +00:00
}
function getBuiltInExtensions ( ) {
log ( 'Synchronizing built-in extensions...' ) ;
2025-03-01 02:01:53 +00:00
log ( ` You can manage built-in extensions with the ${ ansi _colors _1 . default . cyan ( '--builtin' ) } flag ` ) ;
2024-09-11 02:37:36 +00:00
const control = readControlFile ( ) ;
const streams = [ ] ;
for ( const extension of [ ... builtInExtensions , ... webBuiltInExtensions ] ) {
const controlState = control [ extension . name ] || 'marketplace' ;
control [ extension . name ] = controlState ;
streams . push ( syncExtension ( extension , controlState ) ) ;
}
writeControlFile ( control ) ;
return new Promise ( ( resolve , reject ) => {
2025-03-01 02:01:53 +00:00
event _stream _1 . default . merge ( streams )
2024-09-11 02:37:36 +00:00
. on ( 'error' , reject )
. on ( 'end' , resolve ) ;
} ) ;
}
if ( require . main === module ) {
getBuiltInExtensions ( ) . then ( ( ) => process . exit ( 0 ) ) . catch ( err => {
console . error ( err ) ;
process . exit ( 1 ) ;
} ) ;
}
//# sourceMappingURL=builtInExtensions.js.map