diff --git a/package.json b/package.json index 25054701..84417acf 100644 --- a/package.json +++ b/package.json @@ -201,35 +201,40 @@ "description": "Use local IP as host" }, "liveServer.settings.proxy": { - "type": "object", - "default": { - "enable": false, - "baseUri": "/", - "proxyUri": "http://127.0.0.1:80" - }, - "properties": { - "enable": { - "type": "boolean", - "default": false, - "description": "Make it true to enable the feature." - }, - "baseUri": { - "type": "string", - "default": "/", - "pattern": "" - }, - "proxyUri": { - "type": "string", - "default": "http://127.0.0.1:80", - "pattern": "(^http[s]?://)(.[^(\\|\\s)]+)$" + "type": "array", + "default": [ + { + "enable": false, + "baseUri": "/", + "proxyUri": "http://127.0.0.1:80" } - }, - "required": [ - "enable", - "baseUri", - "proxyUri" ], - "additionalProperties": false, + "items": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "default": false, + "description": "Make it true to enable the feature." + }, + "baseUri": { + "type": "string", + "default": "/", + "pattern": "" + }, + "proxyUri": { + "type": "string", + "default": "http://127.0.0.1:80", + "pattern": "(^http[s]?://)(.[^(\\|\\s)]+)$" + } + }, + "required": [ + "enable", + "baseUri", + "proxyUri" + ], + "additionalProperties": false + }, "description": "To Setup Proxy" }, "liveServer.settings.useWebExt": { diff --git a/src/Config.ts b/src/Config.ts index 7581e7e7..bbe22155 100644 --- a/src/Config.ts +++ b/src/Config.ts @@ -89,8 +89,12 @@ export class Config { return Config.getSettings('useWebExt') || false; } - public static get getProxy(): IProxy { - return Config.getSettings('proxy'); + public static get getProxy(): IProxy[] { + const val = Config.getSettings('proxy'); + if (!val) { + return []; + } + return Array.isArray(val) ? val : [val]; } public static get getHttps(): IHttps { diff --git a/src/Helper.ts b/src/Helper.ts index 625cc68c..ab9fc6c3 100644 --- a/src/Helper.ts +++ b/src/Helper.ts @@ -144,15 +144,28 @@ export class Helper { } static getProxySetup() { - const proxySetup = Config.getProxy; - let proxy = [[]]; - if (proxySetup.enable === true) { - proxy[0].push(proxySetup.baseUri, proxySetup.proxyUri); + let proxySetup = Config.getProxy; + + // Handle missing/undefined config + if (!proxySetup) { + return null; } - else { - proxy = null; // required to change the type [[]] to black array []. + + // Backward compatibility: old single-object config + if (!Array.isArray(proxySetup)) { + proxySetup = [proxySetup]; + } + + const validProxy = proxySetup.filter(item => item && typeof item === 'object' && item.enable); + + if (!validProxy.length) { + return null; } + const proxy = validProxy.map(item => { + return [item.baseUri, item.proxyUri]; + }); + return proxy; } }