From 8f99d55f9bfb55a22ecca3d308aa76bbb3e94bbb Mon Sep 17 00:00:00 2001 From: Ben Brown Date: Thu, 22 Apr 2021 15:38:58 -0500 Subject: [PATCH] fix: adjust package manager feeds (#7243) * Fix #7092: set default page size to 100 items * Fixes #6854: merge community feeds into main feed, sort by downloads * Fixes #7043: include any component tagged msbot-component * improve error handling * restore different checks for declarative only vs code driven components * refactor to use includes instead of indexOf Co-authored-by: Ben Yackley <61990921+beyackle@users.noreply.github.com> --- .../src/node/feeds/npm/npmFeed.ts | 2 ++ .../src/node/feeds/nuget/nugetFeed.ts | 2 ++ .../src/node/feeds/nuget/nugetInterfaces.ts | 1 + extensions/packageManager/src/node/index.ts | 33 ++----------------- .../packageManager/src/pages/Library.tsx | 16 +++++---- 5 files changed, 17 insertions(+), 37 deletions(-) diff --git a/extensions/packageManager/src/node/feeds/npm/npmFeed.ts b/extensions/packageManager/src/node/feeds/npm/npmFeed.ts index fd88d9d0bd..67f9aa0b78 100644 --- a/extensions/packageManager/src/node/feeds/npm/npmFeed.ts +++ b/extensions/packageManager/src/node/feeds/npm/npmFeed.ts @@ -100,6 +100,8 @@ export class NpmFeed implements IFeed { url = `${url}&from=${query.skip}`; } + url = `${url}&popularity=1.0`; + return url; } } diff --git a/extensions/packageManager/src/node/feeds/nuget/nugetFeed.ts b/extensions/packageManager/src/node/feeds/nuget/nugetFeed.ts index 87f41627e5..40fa802971 100644 --- a/extensions/packageManager/src/node/feeds/nuget/nugetFeed.ts +++ b/extensions/packageManager/src/node/feeds/nuget/nugetFeed.ts @@ -70,6 +70,8 @@ export class NuGetFeed implements IFeed { } const searchResult = httpResponse.data as INuGetSearchResult; + // sort these results by total downloads + searchResult.data = searchResult.data.sort((a, b) => b.totalDownloads - a.totalDownloads); if (searchResult.data) { return this.asPackageDefinition(searchResult); } diff --git a/extensions/packageManager/src/node/feeds/nuget/nugetInterfaces.ts b/extensions/packageManager/src/node/feeds/nuget/nugetInterfaces.ts index 32bb1c4bd1..adccbe1378 100644 --- a/extensions/packageManager/src/node/feeds/nuget/nugetInterfaces.ts +++ b/extensions/packageManager/src/node/feeds/nuget/nugetInterfaces.ts @@ -22,6 +22,7 @@ export interface INuGetPackage { versions: INuGetVersion[]; tags?: string | string[]; projectUrl?: string; + totalDownloads: number; } /** diff --git a/extensions/packageManager/src/node/index.ts b/extensions/packageManager/src/node/index.ts index 8ce2ad215a..dac4bc784a 100644 --- a/extensions/packageManager/src/node/index.ts +++ b/extensions/packageManager/src/node/index.ts @@ -15,13 +15,7 @@ import { FeedFactory } from './feeds/feedFactory'; const API_ROOT = '/api'; const hasSchema = (c) => { - // NOTE: A special case for orchestrator is included here because it does not directly include the schema - // the schema for orchestrator is in a dependent package - // additionally, our schemamerge command only returns the top level components found, even though - // it does properly discover and include the schema from this dependent package. - // without this special case, composer does not see orchestrator as being installed even though it is. - // in the future this should be resolved in the schemamerger library by causing the includesSchema property to be passed up to all parent libraries - return c.includesSchema || c.name.toLowerCase() === 'microsoft.bot.components.orchestrator'; + return c.includesSchema || c.keywords?.includes('msbot-component'); }; const isAdaptiveComponent = (c) => { @@ -110,18 +104,6 @@ export default async (composer: IExtensionRegistration): Promise => { text: formatMessage('nuget'), url: 'https://api.nuget.org/v3/index.json', readonly: true, - defaultQuery: { - prerelease: true, - semVerLevel: '2.0.0', - query: `microsoft.bot.components+tags:${botComponentTag}`, - }, - type: PackageSourceType.NuGet, - }, - { - key: 'nuget-community', - text: formatMessage('community packages'), - url: 'https://api.nuget.org/v3/index.json', - readonly: true, defaultQuery: { prerelease: true, semVerLevel: '2.0.0', @@ -134,17 +116,6 @@ export default async (composer: IExtensionRegistration): Promise => { text: formatMessage('npm'), url: `https://registry.npmjs.org/-/v1/search`, readonly: true, - defaultQuery: { - prerelease: true, - query: `keywords:${botComponentTag}+scope:microsoft`, - }, - type: PackageSourceType.NPM, - }, - { - key: 'npm-community', - text: formatMessage('JS community packages'), - url: `https://registry.npmjs.org/-/v1/search`, - readonly: true, defaultQuery: { prerelease: true, query: `keywords:${botComponentTag}`, @@ -227,6 +198,8 @@ export default async (composer: IExtensionRegistration): Promise => { composer.log('GETTING FEED', packageSource, packageSource.defaultQuery); + // set default page size to 100 + packageSource.defaultQuery.take = 100; const packages = await feed.getPackages(packageSource.defaultQuery); if (Array.isArray(packages)) { diff --git a/extensions/packageManager/src/pages/Library.tsx b/extensions/packageManager/src/pages/Library.tsx index 406f34552c..80bc3333fb 100644 --- a/extensions/packageManager/src/pages/Library.tsx +++ b/extensions/packageManager/src/pages/Library.tsx @@ -516,8 +516,6 @@ const Library: React.FC = () => { updateInstalledComponents(results.data.components); } else { - telemetryClient.track('PackageUninstallFailed', { package: selectedItem.name }); - throw new Error(results.data.message); } @@ -526,11 +524,15 @@ const Library: React.FC = () => { } catch (err) { telemetryClient.track('PackageUninstallFailed', { package: selectedItem.name }); - setApplicationLevelError({ - status: err.response.status, - message: err.response && err.response.data.message ? err.response.data.message : err, - summary: strings.importError, - }); + if (err.response) { + setApplicationLevelError({ + status: err.response.status, + message: err.response && err.response.data.message ? err.response.data.message : err, + summary: strings.importError, + }); + } else { + setApplicationLevelError(err); + } } setWorking(''); }