From 72bbbfd243b5a907b24ce35bdcbd51ff9af39024 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Wed, 18 Mar 2020 09:30:08 +0100 Subject: [PATCH] Require plugin IDs to be valid --- packages/cli/src/commands/createPlugin.ts | 12 ++++++++++-- scripts/cli-e2e-test.js | 23 +++++++++++++++++++++-- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/packages/cli/src/commands/createPlugin.ts b/packages/cli/src/commands/createPlugin.ts index 20ab32ef9a..22679b2dfa 100644 --- a/packages/cli/src/commands/createPlugin.ts +++ b/packages/cli/src/commands/createPlugin.ts @@ -332,8 +332,16 @@ const createPlugin = async () => { type: 'input', name: 'id', message: chalk.blue('Enter an ID for the plugin [required]'), - validate: (value: any) => - value ? true : chalk.red('Please enter an ID for the plugin'), + validate: (value: any) => { + if (!value) { + return chalk.red('Please enter an ID for the plugin'); + } else if (!/^[a-z0-9]+(-[a-z0-9]+)*$/.test(value)) { + return chalk.red( + 'Plugin IDs must be kebab-cased and contain only letters, digits, and dashes.', + ); + } + return true; + }, }, ]; const answers: Answers = await inquirer.prompt(questions); diff --git a/scripts/cli-e2e-test.js b/scripts/cli-e2e-test.js index 4ab41a7a58..4e6a8fb9bc 100644 --- a/scripts/cli-e2e-test.js +++ b/scripts/cli-e2e-test.js @@ -1,3 +1,19 @@ +/* + * Copyright 2020 Spotify AB + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + const { resolve: resolvePath } = require('path'); const childProcess = require('child_process'); const { spawn } = childProcess; @@ -68,7 +84,11 @@ function spawnPiped(cmd, options) { }; } - const child = spawn(cmd[0], cmd.slice(1), { stdio: 'pipe', shell: true, ...options }); + const child = spawn(cmd[0], cmd.slice(1), { + stdio: 'pipe', + shell: true, + ...options, + }); child.on('error', handleError); child.on('exit', code => { if (code) { @@ -99,7 +119,6 @@ async function waitForPageWithText( try { await new Promise(resolve => setTimeout(resolve, intervalMs)); await browser.visit(path); - break; } catch (error) { attempts++;