Skip to content

Commit f57baee

Browse files
Merge pull request #5 from pinanks/DOT-880
DOT-880
2 parents a9c626a + 6eb6dd4 commit f57baee

File tree

6 files changed

+280
-14
lines changed

6 files changed

+280
-14
lines changed

commands/storybook.js

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,22 @@
11
const { default: axios } = require('axios')
22
const fs = require('fs');
33
const { sendDoM } = require('./utils/dom')
4-
const { validateStorybookUrl } = require('./utils/validate')
4+
const { validateStorybookUrl, validateStorybookDir } = require('./utils/validate')
55
const { defaultSmartUIConfig } = require('./utils/config')
66
const { skipStory } = require('./utils/story')
7+
const { createStaticServer } = require('./utils/server')
78

8-
async function storybook(url, options) {
9-
// Check connection with storybook url
10-
await validateStorybookUrl(url);
9+
async function storybook(serve, options) {
10+
let server, url;
11+
let type = /^https?:\/\//.test(serve) ? 'url' : 'dir'
12+
if (type === 'url') {
13+
await validateStorybookUrl(serve);
14+
url = serve;
15+
} else {
16+
await validateStorybookDir(serve);
17+
server = await createStaticServer(serve);
18+
url = `http://localhost:${server.address().port}`;
19+
}
1120

1221
// TODO: modularize this and separate check for file exists
1322
let storybookConfig = defaultSmartUIConfig.storybook;
@@ -37,8 +46,8 @@ async function storybook(url, options) {
3746
storybookConfig.browsers = (!storybookConfig.browsers.length) ? 'all' : storybookConfig.browsers.toString();
3847

3948
// Get stories object from stories.json and add url corresponding to every story ID
40-
axios.get(new URL('stories.json', url).href)
41-
.then(function (response) {
49+
await axios.get(new URL('stories.json', url).href)
50+
.then(async function (response) {
4251
let stories = {}
4352
for (const [storyId, storyInfo] of Object.entries(response.data.stories)) {
4453
if (!skipStory(storyInfo.name, storybookConfig)) {
@@ -59,7 +68,7 @@ async function storybook(url, options) {
5968
}
6069
}
6170
// Capture DoM of every story and send it to renderer API
62-
sendDoM(url, stories, storybookConfig, options);
71+
await sendDoM(url, stories, storybookConfig, options);
6372
})
6473
.catch(function (error) {
6574
if (error.response) {
@@ -69,8 +78,11 @@ async function storybook(url, options) {
6978
} else {
7079
console.log('[smartui] Error: Cannot fetch Storybook stories');
7180
}
72-
process.exit(0);
7381
});
82+
83+
// Close static server
84+
if (server) server?.close();
85+
7486
};
7587

7688
module.exports = { storybook };

commands/utils/server.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
var http = require('http');
2+
var finalhandler = require('finalhandler');
3+
var serveStatic = require('serve-static');
4+
5+
async function createStaticServer(staticPath) {
6+
var serve = serveStatic(staticPath, {'index': false});
7+
var server = http.createServer(function(req, res){
8+
var done = finalhandler(req, res);
9+
serve(req, res, done);
10+
})
11+
12+
return server.listen();
13+
}
14+
15+
module.exports = { createStaticServer }

commands/utils/validate.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const axios = require('axios');
22
var { constants } = require('./constants');
3+
const fs = require('fs');
34

45
function validateProjectToken(options) {
56
if (process.env.PROJECT_TOKEN) {
@@ -51,4 +52,12 @@ function validateStorybookUrl(url) {
5152
});
5253
};
5354

54-
module.exports = { validateProjectToken, validateStorybookUrl };
55+
async function validateStorybookDir(dir) {
56+
// verify the storybook static directory exists
57+
if (!fs.existsSync(dir)) {
58+
console.log(`[smartui] Error: No directory found: ${dir}`);
59+
process.exit(1);
60+
}
61+
};
62+
63+
module.exports = { validateProjectToken, validateStorybookUrl, validateStorybookDir };

index.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@ configCommand.command('create')
2424

2525
program.command('storybook')
2626
.description('Snapshot Storybook stories')
27-
.argument('<url>', 'Storybook url')
27+
.argument('<url|directory>', 'Storybook url or static build directory')
2828
.option('-c --config <file>', 'Config file path')
2929
// .option('--env <prod|stage>', 'Runtime environment option', 'prod')
30-
.action(async function(url, options) {
30+
.action(async function(serve, options) {
3131
options.env = program.opts().env || 'prod';
3232
await validateProjectToken(options);
33-
storybook(url, options);
33+
storybook(serve, options);
3434
});
3535

3636
program.parse();

0 commit comments

Comments
 (0)