From 53ff5aee71f2151935c172b463ce543ef82e2c07 Mon Sep 17 00:00:00 2001 From: Samuel Imolorhe Date: Sat, 2 May 2020 16:52:58 +0200 Subject: [PATCH] Added extra option and value in getPluginInfoFromString. Closes #1217. --- .../plugin/plugin-registry.service.spec.ts | 16 ++++++++++++++++ .../services/plugin/plugin-registry.service.ts | 7 ++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/packages/altair-app/src/app/services/plugin/plugin-registry.service.spec.ts b/packages/altair-app/src/app/services/plugin/plugin-registry.service.spec.ts index 6d2694474c..2bef2242ef 100644 --- a/packages/altair-app/src/app/services/plugin/plugin-registry.service.spec.ts +++ b/packages/altair-app/src/app/services/plugin/plugin-registry.service.spec.ts @@ -68,6 +68,22 @@ describe('PluginRegistryService', () => { }); }); + it('return extra option if specified', () => { + const service: PluginRegistryService = TestBed.get(PluginRegistryService); + expect(service.getPluginInfoFromString('altair-graphql-plugin-plugin-name@0.0.1::[opt]->[1]')).toEqual({ + name: 'altair-graphql-plugin-plugin-name', + version: '0.0.1', + pluginSource: PluginSource.NPM, + opt: '1', + } as any); + expect(service.getPluginInfoFromString('url:altair-graphql-plugin-plugin-name@0.0.1::[url]->[http://localhost:8080]')).toEqual({ + name: 'altair-graphql-plugin-plugin-name', + version: '0.0.1', + pluginSource: PluginSource.URL, + url: 'http://localhost:8080', + } as any); + }); + it('return specified values', () => { const service: PluginRegistryService = TestBed.get(PluginRegistryService); expect(service.getPluginInfoFromString('url:altair-graphql-plugin-plugin-name@0.1.1')).toEqual({ diff --git a/packages/altair-app/src/app/services/plugin/plugin-registry.service.ts b/packages/altair-app/src/app/services/plugin/plugin-registry.service.ts index 40f66760ee..7c5356a902 100644 --- a/packages/altair-app/src/app/services/plugin/plugin-registry.service.ts +++ b/packages/altair-app/src/app/services/plugin/plugin-registry.service.ts @@ -103,14 +103,14 @@ export class PluginRegistryService { } /** - * Given a plugin string in the format: :@, + * Given a plugin string in the format: :@::[]->[], * it returns the details of the plugin * @param pluginStr */ getPluginInfoFromString(pluginStr: string) { - const matches = pluginStr.match(/((.*)\:)?(.[^@]*)(@(.*))?/); + const matches = pluginStr.match(/(([A-Za-z_]*)\:)?(.[A-Za-z0-9\-]*)(@([^#\:\[\]]*))?(\:\:\[(.*)\]->\[(.*)\])?/); if (matches && matches.length) { - const [, , pluginSource = PluginSource.NPM, pluginName, , pluginVersion = 'latest'] = matches; + const [, , pluginSource = PluginSource.NPM, pluginName, , pluginVersion = 'latest', , opt, optVal ] = matches; if (pluginName && pluginVersion) { if (!pluginName.startsWith(PLUGIN_NAME_PREFIX)) { throw new Error(`Plugin name must start with ${PLUGIN_NAME_PREFIX}`); @@ -119,6 +119,7 @@ export class PluginRegistryService { name: pluginName, version: pluginVersion, pluginSource, + ...opt && optVal && { [opt]: optVal }, }; } }