Skip to content

Commit 8eabfe7

Browse files
chore(scenarios): improve scenarios DX (#4405)
* chore: add scenarios dropdown * chore: rename var to const
1 parent a338b1b commit 8eabfe7

File tree

3 files changed

+300
-16
lines changed

3 files changed

+300
-16
lines changed

scenarios/browser/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"devDependencies": {
77
"html-webpack-plugin": "^5.5.0",
88
"webpack": "^5.62.1",
9-
"webpack-bundle-analyzer": "^4.5.0"
9+
"webpack-bundle-analyzer": "^4.5.0",
10+
"inquirer": "^8.2.0"
1011
}
1112
}

scenarios/browser/webpack.js

+24-11
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,28 @@
11
const path = require('path');
22
const { promises } = require('fs');
33

4+
const inquirer = require('inquirer');
45
const webpack = require('webpack');
56
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
67
const HtmlWebpackPlugin = require('html-webpack-plugin');
78

8-
async function init(scenario) {
9-
if (!hasCurrentScenario(scenario)) {
10-
throw new Error(`Scenario "${scenario}" does not exist`);
11-
}
9+
async function init() {
10+
const scenarios = await getScenariosFromDirectories();
1211

13-
console.log(`Bundling scenario: ${scenario}`);
12+
const answers = await inquirer.prompt([
13+
{
14+
type: 'rawlist',
15+
name: 'scenario',
16+
message: 'Which scenario you want to run?',
17+
choices: scenarios,
18+
pageSize: scenarios.length,
19+
loop: false,
20+
},
21+
]);
1422

15-
await runWebpack(scenario);
23+
console.log(`Bundling scenario: ${answers.scenario}`);
24+
25+
await runWebpack(answers.scenario);
1626
}
1727

1828
async function runWebpack(scenario) {
@@ -59,11 +69,14 @@ async function generateAlias() {
5969
);
6070
}
6171

62-
async function hasCurrentScenario(scenario) {
72+
/**
73+
* Generates an array of available scenarios
74+
*/
75+
async function getScenariosFromDirectories() {
76+
const exclude = ['node_modules', 'dist', '~', 'package.json', 'yarn.lock', 'webpack.js'];
77+
6378
const dirents = await promises.readdir(__dirname, { withFileTypes: true });
64-
return dirents.filter(dir => dir.isDirectory()).find(dir => dir.name === scenario);
79+
return dirents.map(dirent => dirent.name).filter(mape => !exclude.includes(mape));
6580
}
6681

67-
const CURRENT_SCENARIO = 'basic';
68-
69-
init(CURRENT_SCENARIO);
82+
init();

0 commit comments

Comments
 (0)