From 5fe6b1973efb3ac99acd7b215232bd5c1d61809f Mon Sep 17 00:00:00 2001 From: Bhargav Krishna Date: Fri, 2 Jun 2017 11:57:40 -0700 Subject: [PATCH] adding api search code for libraries --- src/client/app/services/monaco.service.ts | 42 ++++++++++++++++++++++- src/client/vendor.ts | 2 ++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/client/app/services/monaco.service.ts b/src/client/app/services/monaco.service.ts index 4619540a..0f7167be 100644 --- a/src/client/app/services/monaco.service.ts +++ b/src/client/app/services/monaco.service.ts @@ -10,8 +10,22 @@ const Regex = { GLOBAL: /^.*/i }; +interface NpmPackage { + name: string[]; + description: string[]; + version: string[]; +} + +interface NpmSearchResults { + results: NpmPackage[]; + total: number; + from: number; +} + @Injectable() export class MonacoService { + private _npmSearchAPI = 'https://npmsearch.com/query?q="@package"&fields=name,description,version'; + private _defaults: monaco.editor.IEditorConstructionOptions = { value: '', language: 'text', @@ -129,6 +143,32 @@ export class MonacoService { }); } + private async _queryNpmSearch(name: string) { + try { + const query = this._npmSearchAPI.replace('@package', name); + console.log(`searching for: `, query); + return await this._request.get(query, ResponseTypes.JSON) + .flatMap(data => data.results) + .filter(result => !(result == null)) + .map(result => { + label: result.name[0], + documentation: result.description[0], + kind: monaco.languages.CompletionItemKind.Module, + insertText: `${result.name[0]}@${result.version[0]}`, + }) + .scan((result, current, i) => result.concat(current), []) + .map(list => { + isIncomplete: list.length > 0, + items: list + }) + .toPromise(); + } + catch (exception) { + console.log(`error:`, exception); + return this.libraries; + } + } + private async _registerLanguageServices() { let monaco = await MonacoService.current; monaco.languages.register({ id: 'libraries' }); @@ -159,7 +199,7 @@ export class MonacoService { } if (Regex.GLOBAL.test(currentLine)) { - return this.libraries; + return this._queryNpmSearch(currentLine); } return Promise.resolve([]); diff --git a/src/client/vendor.ts b/src/client/vendor.ts index 128690fa..66256444 100644 --- a/src/client/vendor.ts +++ b/src/client/vendor.ts @@ -17,6 +17,7 @@ import 'rxjs/add/operator/debounceTime'; import 'rxjs/add/operator/filter'; import 'rxjs/add/operator/mergeMap'; import 'rxjs/add/operator/catch'; +import 'rxjs/add/operator/scan'; // Lodash import 'lodash/debounce'; @@ -34,3 +35,4 @@ import 'lodash/first'; import '@microsoft/office-js-helpers'; import 'js-yaml'; import 'crypto-js/sha1'; +