From 4494f77f6111249d97295923a706883a8910840d Mon Sep 17 00:00:00 2001 From: Mariusz Nowak Date: Wed, 17 Nov 2021 12:02:41 +0100 Subject: [PATCH] fix(CLI): Fix component template recognition in triage Top level configuration not containing `component` was considered unconditionally as `serverless`, that's not correct --- lib/cli/triage.js | 92 ++++++++++--------- .../foo/serverless.yml | 1 + .../template-with-root-config/serverless.yml | 1 + 3 files changed, 49 insertions(+), 45 deletions(-) create mode 100644 test/unit/lib/cli/triage/fixtures/@serverless/components/yml/template-with-root-config/foo/serverless.yml create mode 100644 test/unit/lib/cli/triage/fixtures/@serverless/components/yml/template-with-root-config/serverless.yml diff --git a/lib/cli/triage.js b/lib/cli/triage.js index 96c70fac866..17737e72df4 100644 --- a/lib/cli/triage.js +++ b/lib/cli/triage.js @@ -49,52 +49,54 @@ module.exports = async () => { if (configurationExtension) { // Found top level service configuration, recognize CLI by content - - const resolveByObjectConfiguration = (configuration) => { - if (configuration.provider) return 'serverless'; - if (configuration.component) return '@serverless/components'; - for (const value of Object.values(configuration)) { - if (value.component) return '@serverless/cli'; - } - return 'serverless'; - }; - switch (configurationExtension) { - case 'yml': - case 'yaml': { - const content = await fsp.readFile(`serverless.${configurationExtension}`, 'utf8'); - if (content.search(/(?:^|\n)provider\s*:/) !== -1) return 'serverless'; - if (content.search(/(?:^|\n)component\s*:/) !== -1) return '@serverless/components'; - if (content.search(/\n\s+component\s*:/) !== -1) return '@serverless/cli'; - return 'serverless'; - } - case 'json': { - const configuration = (() => { - try { - return require(`${process.cwd()}/serverless.json`); - } catch { - return null; - } - })(); - if (!configuration) return 'serverless'; - return resolveByObjectConfiguration(configuration); - } - case 'js': { - const configuration = (() => { - try { - return require(`${process.cwd()}/serverless.js`); - } catch { - return null; - } - })(); - if (!configuration) return 'serverless'; - if (typeof configuration === 'function') return '@serverless/cli'; - return resolveByObjectConfiguration(configuration); + const targetCliName = await (async () => { + const resolveByObjectConfiguration = (configuration) => { + if (configuration.provider) return 'serverless'; + if (configuration.component) return '@serverless/components'; + for (const value of Object.values(configuration)) { + if (value.component) return '@serverless/cli'; + } + return null; + }; + switch (configurationExtension) { + case 'yml': + case 'yaml': { + const content = await fsp.readFile(`serverless.${configurationExtension}`, 'utf8'); + if (content.search(/(?:^|\n)provider\s*:/) !== -1) return 'serverless'; + if (content.search(/(?:^|\n)component\s*:/) !== -1) return '@serverless/components'; + if (content.search(/\n\s+component\s*:/) !== -1) return '@serverless/cli'; + return null; + } + case 'json': { + const configuration = (() => { + try { + return require(`${process.cwd()}/serverless.json`); + } catch { + return null; + } + })(); + if (!configuration) return 'serverless'; + return resolveByObjectConfiguration(configuration); + } + case 'js': { + const configuration = (() => { + try { + return require(`${process.cwd()}/serverless.js`); + } catch { + return null; + } + })(); + if (!configuration) return 'serverless'; + if (typeof configuration === 'function') return '@serverless/cli'; + return resolveByObjectConfiguration(configuration); + } + case 'ts': + return 'serverless'; + default: + throw new Error(`Unrecognized extension "${configurationExtension}"`); } - case 'ts': - return 'serverless'; - default: - throw new Error(`Unrecognized extension "${configurationExtension}"`); - } + })(); + if (targetCliName) return targetCliName; } // No top level service configuration diff --git a/test/unit/lib/cli/triage/fixtures/@serverless/components/yml/template-with-root-config/foo/serverless.yml b/test/unit/lib/cli/triage/fixtures/@serverless/components/yml/template-with-root-config/foo/serverless.yml new file mode 100644 index 00000000000..e3e6ecdf9ed --- /dev/null +++ b/test/unit/lib/cli/triage/fixtures/@serverless/components/yml/template-with-root-config/foo/serverless.yml @@ -0,0 +1 @@ +component: foo diff --git a/test/unit/lib/cli/triage/fixtures/@serverless/components/yml/template-with-root-config/serverless.yml b/test/unit/lib/cli/triage/fixtures/@serverless/components/yml/template-with-root-config/serverless.yml new file mode 100644 index 00000000000..5127bd8469d --- /dev/null +++ b/test/unit/lib/cli/triage/fixtures/@serverless/components/yml/template-with-root-config/serverless.yml @@ -0,0 +1 @@ +app: foo