@@ -2,9 +2,9 @@ import * as path from 'path';
22import * as os from 'os' ;
33import * as fse from 'fs-extra' ;
44import { from , of } from 'rxjs' ;
5- import { mergeMap , filter , map } from 'rxjs/operators' ;
5+ import { mergeMap , filter } from 'rxjs/operators' ;
66import { IExtensionMode } from '@codeblitzjs/ide-common' ;
7- import { EXTENSION_DIR , EXTENSION_METADATA_DIR , EXTENSION_FIELD , resolveMarketplaceConfig } from './util/constant' ;
7+ import { IExtensionInstallationConfig , kExtensionConfig , resolveExtensionInstallationConfig , resolveMarketplaceConfig } from './util/constant' ;
88import { ExtensionInstaller , Extension } from './util/installer' ;
99import { getExtension } from './extension/scanner' ;
1010import {
@@ -31,21 +31,23 @@ export const install = async (
3131
3232 createInstaller ( ) ;
3333
34+ const installationConfig = resolveExtensionInstallationConfig ( ) ;
35+
3436 let extensions : IExtensionDesc [ ] = [ ] ;
3537
3638 if ( extensionId ?. length ) {
3739 extensions = parseExtensionId ( extensionId , options ?. mode ) ;
3840 shouldWriteConfig = true ;
39- await Promise . all ( extensions . map ( ( ext ) => removeExtensionById ( ext ) ) ) ;
41+ await Promise . all ( extensions . map ( ( ext ) => removeExtensionById ( installationConfig , ext ) ) ) ;
4042 } else {
4143 const extensionConfig = await getExtensionFromPackage ( ) ;
4244 if ( ! extensionConfig . length && ! options ?. silent ) {
43- log . warn ( `当前未配置 ${ EXTENSION_FIELD } npx alex ext -h 查看帮助` ) ;
45+ log . warn ( `当前未配置 ${ kExtensionConfig . extensionField } npx ${ kExtensionConfig . product } ext -h 查看帮助` ) ;
4446 return ;
4547 }
4648 checkExtensionConfig ( extensionConfig ) ;
4749 extensions = extensionConfig ;
48- await removeAllExtension ( ) ;
50+ await removeAllExtension ( installationConfig ) ;
4951 }
5052
5153 if ( ! extensions . length ) return ;
@@ -67,7 +69,7 @@ export const install = async (
6769 ) ,
6870 mergeMap ( ( [ extPath , mode ] ) => getExtension ( extPath , mode ) , 5 ) ,
6971 filter ( ( data ) => ! ! data ) ,
70- mergeMap ( writeMetadata )
72+ mergeMap ( ( meta ) => writeMetadata ( installationConfig , meta ! ) )
7173 )
7274 . subscribe (
7375 ( ext ) => {
@@ -101,6 +103,8 @@ export const installLocalExtensions = async (dirs: string[], options?: IExtensio
101103 return ;
102104 }
103105
106+ const installationConfig = resolveExtensionInstallationConfig ( ) ;
107+
104108 const absoluteDirs = dirs . map ( ( dir ) => path . resolve ( dir ) ) ;
105109
106110 log . start ( '开始安装本地扩展\n' ) ;
@@ -119,7 +123,7 @@ export const installLocalExtensions = async (dirs: string[], options?: IExtensio
119123 . pipe (
120124 mergeMap ( ( localExtPath ) => getExtension ( localExtPath , 'local' , httpUri ) , 5 ) ,
121125 filter ( ( data ) => ! ! data ) ,
122- mergeMap ( writeMetadata )
126+ mergeMap ( ( meta ) => writeMetadata ( installationConfig , meta ! ) )
123127 )
124128 . subscribe (
125129 ( ext ) => {
@@ -140,40 +144,40 @@ async function createInstaller() {
140144 const pkgJSON = fse . readJSONSync ( path . join ( __dirname , '../package.json' ) ) ;
141145
142146 const marketplaceConfig = resolveMarketplaceConfig ( ) ;
143-
147+ const installConfig = resolveExtensionInstallationConfig ( ) ;
144148 extensionInstaller = new ExtensionInstaller ( {
145149 api : marketplaceConfig . endpoint ,
146150 accountId : marketplaceConfig . accountId ,
147151 masterKey : marketplaceConfig . masterKey ,
148152 frameworkVersion : pkgJSON . engines . opensumi ,
149- dist : EXTENSION_DIR ,
153+ dist : installConfig . extensionDir ,
150154 ignoreIncreaseCount : true ,
151155 retry : 3 , // 失败重试
152156 } ) ;
153157}
154158
155- async function removeAllExtension ( ) {
156- await fse . remove ( EXTENSION_DIR ) ;
157- await fse . remove ( EXTENSION_METADATA_DIR ) ;
158- await fse . ensureDir ( EXTENSION_DIR ) ;
159- await fse . ensureDir ( EXTENSION_METADATA_DIR ) ;
159+ async function removeAllExtension ( installationConfig : IExtensionInstallationConfig ) {
160+ await fse . remove ( installationConfig . extensionDir ) ;
161+ await fse . remove ( installationConfig . extensionMetadataDir ) ;
162+ await fse . ensureDir ( installationConfig . extensionDir ) ;
163+ await fse . ensureDir ( installationConfig . extensionMetadataDir ) ;
160164}
161165
162- async function removeExtensionById ( ext : IExtensionDesc ) {
166+ async function removeExtensionById ( installationConfig : IExtensionInstallationConfig , ext : IExtensionDesc ) {
163167 const extensionId = `${ ext . publisher } .${ ext . name } ` ;
164168 return Promise . all ( [
165169 await fse . remove (
166- path . join ( `${ EXTENSION_DIR } ` , `${ extensionId } ${ ext . version ? `-${ ext . version } ` : '' } ` )
170+ path . join ( `${ installationConfig . extensionDir } ` , `${ extensionId } ${ ext . version ? `-${ ext . version } ` : '' } ` )
167171 ) ,
168- await fse . remove ( path . join ( EXTENSION_METADATA_DIR , `${ extensionId } .js` ) ) ,
169- await fse . remove ( path . join ( EXTENSION_METADATA_DIR , `${ extensionId } .d.ts` ) ) ,
172+ await fse . remove ( path . join ( installationConfig . extensionMetadataDir , `${ extensionId } .js` ) ) ,
173+ await fse . remove ( path . join ( installationConfig . extensionMetadataDir , `${ extensionId } .d.ts` ) ) ,
170174 ] ) ;
171175}
172176
173177async function getExtensionFromPackage ( ) : Promise < IExtensionDesc [ ] > {
174178 try {
175179 const projectPkgJSON = await fse . readJSON ( resolveCWDPkgJSON ( ) ) ;
176- return projectPkgJSON ?. [ EXTENSION_FIELD ] ?? [ ] ;
180+ return projectPkgJSON ?. [ kExtensionConfig . extensionField ] ?? [ ] ;
177181 } catch ( err ) {
178182 return [ ] ;
179183 }
@@ -183,7 +187,7 @@ async function setExtensionFromPackage(config: any) {
183187 try {
184188 const pkgPath = resolveCWDPkgJSON ( ) ;
185189 const projectPkgJSON = await fse . readJSON ( pkgPath ) ;
186- projectPkgJSON [ EXTENSION_FIELD ] = config ;
190+ projectPkgJSON [ kExtensionConfig . extensionField ] = config ;
187191 await fse . writeJSON ( pkgPath , projectPkgJSON , { spaces : 2 } ) ;
188192 } catch ( err ) { }
189193}
@@ -233,13 +237,13 @@ async function installExtension(extension: IExtensionDesc) {
233237 return [ extensionPath , extension . mode ] as const ;
234238}
235239
236- async function writeMetadata ( metadata : IExtensionBasicMetadata ) {
237- await fse . ensureDir ( EXTENSION_METADATA_DIR ) ;
240+ async function writeMetadata ( installationConfig : IExtensionInstallationConfig , metadata : IExtensionBasicMetadata ) {
241+ await fse . ensureDir ( installationConfig . extensionMetadataDir ) ;
238242
239243 const { extension } = metadata ;
240244 const extensionId = `${ extension . publisher } .${ extension . name } ` ;
241245 await fse . writeFile (
242- path . join ( EXTENSION_METADATA_DIR , `${ extensionId } .js` ) ,
246+ path . join ( installationConfig . extensionMetadataDir , `${ extensionId } .js` ) ,
243247 `
244248module.exports = ${ JSON . stringify ( metadata , null , 2 ) }
245249 ` . trim ( ) + '\n'
@@ -266,6 +270,8 @@ async function modifyPkgJSON(extensions: IExtensionIdentity[]) {
266270
267271// uninstall
268272export async function uninstall ( extensionId : string [ ] ) {
273+ const installationConfig = resolveExtensionInstallationConfig ( ) ;
274+
269275 const extensions = await getExtensionFromPackage ( ) ;
270276 const removeExtensions : IExtensionDesc [ ] = [ ] ;
271277 const remainExtensions : IExtensionDesc [ ] = [ ] ;
@@ -290,7 +296,7 @@ export async function uninstall(extensionId: string[]) {
290296 throw new Error ( 'error' ) ;
291297 } ) ;
292298 }
293- await Promise . all ( removeExtensions . map ( ( ext ) => removeExtensionById ( ext ) ) ) ;
299+ await Promise . all ( removeExtensions . map ( ( ext ) => removeExtensionById ( installationConfig , ext ) ) ) ;
294300 await setExtensionFromPackage ( remainExtensions ) ;
295301
296302 log . success ( '卸载扩展成功' ) ;
0 commit comments