diff --git a/src/main.ts b/src/main.ts index bf72973..ca0a09d 100644 --- a/src/main.ts +++ b/src/main.ts @@ -29,10 +29,10 @@ module.exports = function (argv: string[]): void { .action((version, { pat }) => catchFatal(publish({ pat, version }))); program - .command('unpublish ') - .description('Unpublishes an extension') + .command('unpublish []') + .description('Unpublishes an extension. Example extension id: microsoft.csharp.') .option('-p, --pat ', 'Personal Access Token') - .action((publisher, name, { pat }) => catchFatal(unpublish(publisher, name, { pat }))); + .action((id, { pat }) => catchFatal(unpublish({ id, pat }))); program .command('list ') diff --git a/src/package.ts b/src/package.ts index ca4f4be..2745a27 100644 --- a/src/package.ts +++ b/src/package.ts @@ -286,7 +286,7 @@ export function validateManifest(manifest: Manifest): Manifest { return manifest; } -export function readManifest(cwd: string): Promise { +export function readManifest(cwd = process.cwd()): Promise { const manifestPath = path.join(cwd, 'package.json'); return readFile(manifestPath, 'utf8') diff --git a/src/publish.ts b/src/publish.ts index e818445..50f6374 100644 --- a/src/publish.ts +++ b/src/publish.ts @@ -157,12 +157,21 @@ export function list(publisher: string): Promise { }); } -export function unpublish(publisher: string, name: string, options: IPublishOptions = {}): Promise { - const details = publisher && name - ? Promise.resolve(({ publisher, name })) - : readManifest(options.cwd); +export interface IUnpublishOptions extends IPublishOptions { + id?: string; +} - return details.then(({ publisher, name }) => { +export function unpublish(options: IUnpublishOptions = {}): Promise { + let promise: Promise<{ publisher: string; name: string; }>; + + if (options.id) { + const [publisher, name] = options.id.split('.'); + promise = Promise.resolve(({ publisher, name })); + } else { + promise = readManifest(options.cwd); + } + + return promise.then(({ publisher, name }) => { const fullName = `${ publisher }.${ name }`; const pat = options.pat ? Promise.resolve(options.pat)