Skip to content

Commit 9d3b8ed

Browse files
authored
Merge pull request #65 from LambdaTest/revert-54-DOT-1554
Revert "add capture command in smartui package"
2 parents dda6729 + ad171a8 commit 9d3b8ed

File tree

5 files changed

+18
-184
lines changed

5 files changed

+18
-184
lines changed

commands/capture.js

Lines changed: 0 additions & 10 deletions
This file was deleted.

commands/utils/constants.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,4 @@ constants.ERROR_CATCHALL = 1
2727
constants.ERROR_BUILD_ALREADY_EXISTS = 3
2828
constants.ERROR_CHANGES_FOUND_OR_REJECTED = 4
2929

30-
constants.ALL = "all";
31-
constants.CAPTURE_COMMAND = "capture";
32-
33-
3430
module.exports = { constants };

commands/utils/dom.js

Lines changed: 15 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ async function sendDoM(storybookUrl, stories, storybookConfig, options) {
1111
const createBrowser = require('browserless')
1212
const browser = createBrowser()
1313

14-
if (!fs.existsSync('doms')) {
14+
if (!fs.existsSync('doms')){
1515
fs.mkdir('doms', (err) => {
1616
if (err) {
1717
console.error(err);
@@ -30,12 +30,12 @@ async function sendDoM(storybookUrl, stories, storybookConfig, options) {
3030
clone = new JSDOM(html);
3131

3232
// Serialize DOM
33-
for (element of clone.window.document.querySelectorAll('img')) {
33+
for(element of clone.window.document.querySelectorAll('img')) {
3434
let image = new URL(element.getAttribute('src'), storybookUrl).href;
3535
let format = path.extname(image).replace(/^./, '');
3636
format = format === 'svg' ? 'svg+xml' : format
3737
let imageAsBase64 = await getBase64(image);
38-
element.setAttribute('src', 'data:image/' + format + ';base64,' + imageAsBase64);
38+
element.setAttribute('src', 'data:image/'+format+';base64,'+imageAsBase64);
3939
}
4040
await serializeCSSOM(dom, clone);
4141

@@ -55,9 +55,9 @@ async function sendDoM(storybookUrl, stories, storybookConfig, options) {
5555
for (const [storyId, storyInfo] of Object.entries(stories)) {
5656
const file = fs.readFileSync('doms/' + storyId + '.html');
5757
let title = storyInfo.kind || storyInfo.title;
58-
title = title ? title.replaceAll('/', '#') + ': ' : '';
58+
title = title ? title.replaceAll('/', '#')+': ' : '';
5959
filename = title + storyInfo.name;
60-
form.append('files', file, filename + '.html');
60+
form.append('files', file, filename+'.html');
6161
}
6262
form.append('resolution', storybookConfig.resolutions);
6363
form.append('browser', storybookConfig.browsers);
@@ -69,15 +69,15 @@ async function sendDoM(storybookUrl, stories, storybookConfig, options) {
6969

7070
githubURL = process.env.GITHUB_URL
7171
if (githubURL) {
72-
form.append('githubURL', githubURL);
72+
form.append('githubURL', githubURL);
7373
}
7474

7575
// Send DOM to render API
7676
await axios.post(constants[options.env].RENDER_API_URL, form, {
7777
headers: {
7878
...form.getHeaders()
7979
}
80-
})
80+
})
8181
.then(async function (response) {
8282
console.log('[smartui] Build URL: ', response.data.buildURL);
8383
console.log('[smartui] Build in progress...');
@@ -88,79 +88,24 @@ async function sendDoM(storybookUrl, stories, storybookConfig, options) {
8888
console.log('[smartui] Build failed: Error: ', error.response.data.message);
8989
} else {
9090
console.log('[smartui] Build failed: Error: ', error.message);
91-
}
91+
}
9292
});
93-
94-
fs.rm('doms', { recursive: true }, (err) => {
93+
94+
fs.rm('doms', {recursive: true}, (err) => {
9595
if (err) {
9696
return console.error(err);
9797
}
9898
});
9999
};
100100

101-
async function fetchDOM(screenshots, options) {
102-
console.log("fetchDOM started")
103-
const createBrowser = require('browserless')
104-
const browser = createBrowser()
105-
106-
if (!fs.existsSync('doms')) {
107-
fs.mkdir('doms', (err) => {
108-
if (err) {
109-
console.error(err);
110-
process.exit(constants.ERROR_CATCHALL);
111-
}
112-
});
113-
}
114-
115-
//TODO: Make this async
116-
for (const screenshot of screenshots) {
117-
console.log(screenshot)
118-
let id = generateId(screenshot.name)
119-
console.log(id)
120-
screenshot.id = id
121-
const browserless = await browser.createContext()
122-
123-
const html = await browserless.html(screenshot.url)
124-
125-
let dom = new JSDOM(html, {
126-
url: screenshot.url,
127-
resources: 'usable'
128-
});
129-
let clone = new JSDOM(html);
130-
131-
// Serialize DOM
132-
for (element of clone.window.document.querySelectorAll('img')) {
133-
try {
134-
let host = hostname(screenshot.url);
135-
let image = new URL(element.getAttribute('src'), `https://${host}`).href;
136-
element.setAttribute('src', image);
137-
} catch (e) {
138-
console.log(e);
139-
}
140-
}
141-
142-
try {
143-
console.log("Creating CSS DOM")
144-
await serializeCSSOM(dom, clone);
145-
fs.writeFileSync(`doms/${id}.html`, clone.serialize());
146-
} catch (err) {
147-
console.error(err);
148-
}
149-
await browserless.destroyContext();
150-
//Async upload
151-
// upload(id, screenshot, options);
152-
}
153-
await browser.close()
154-
}
155-
156101
function getBase64(url) {
157102
return axios.get(url, {
158-
responseType: "text",
159-
responseEncoding: "base64",
160-
})
103+
responseType: "text",
104+
responseEncoding: "base64",
105+
})
161106
.then(response => response.data)
162107
.catch(function (error) {
163-
console.log('[smartui] getBase64 Error: ', error.message);
108+
console.log('[smartui] Error: ', error.message);
164109
process.exit(constants.ERROR_CATCHALL);
165110
});
166111
}
@@ -180,57 +125,4 @@ async function serializeCSSOM(dom, clone) {
180125
});
181126
}
182127

183-
// Returns the hostname portion of a URL.
184-
function hostname(url) {
185-
return new URL(url).hostname;
186-
}
187-
188-
function generateId(str) {
189-
const lowercaseStr = str.toLowerCase();
190-
const noSpacesStr = lowercaseStr.replace(/\s/g, '-');
191-
return noSpacesStr;
192-
}
193-
194-
async function upload(screenshots, options) {
195-
// Create form
196-
let commit = await getLastCommit();
197-
const form = new formData();
198-
console.log("Upload Started with ", screenshots)
199-
200-
for (const screenshot of screenshots) {
201-
const file = fs.readFileSync(`doms/${screenshot.id}.html`);
202-
form.append('files', file, `${screenshot.name}.html`);
203-
}
204-
form.append('resolution', constants.ALL);
205-
form.append('browser', constants.ALL);
206-
form.append('projectToken', process.env.PROJECT_TOKEN);
207-
form.append('branch', commit.branch);
208-
form.append('commitId', commit.shortHash);
209-
form.append('commitAuthor', commit.author.name);
210-
form.append('commitMessage', commit.subject);
211-
form.append('fullPage', "true");
212-
213-
214-
githubURL = process.env.GITHUB_URL
215-
if (githubURL) {
216-
form.append('githubURL', githubURL);
217-
}
218-
219-
// Send DOM to render API
220-
await axios.post(constants[options.env].RENDER_API_URL, form, {
221-
headers: {
222-
...form.getHeaders()
223-
}
224-
}).then(async function (response) {
225-
console.log('[smartui] Build URL: ', response.data.buildURL);
226-
console.log('[smartui] Build in progress...');
227-
await shortPolling(response.data.buildId, 0, options);
228-
}).catch(function (error) {
229-
if (error.response) {
230-
console.log('[smartui] Build failed: Error: ', error.response.data.message);
231-
} else {
232-
console.log('[smartui] Build failed: Error: ', error.message);
233-
}
234-
});
235-
}
236-
module.exports = { sendDoM, fetchDOM, upload };
128+
module.exports = { sendDoM };

commands/utils/validate.js

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ const axios = require('axios');
22
var { constants } = require('./constants');
33
const fs = require('fs');
44
const { getLastCommit } = require('./git');
5-
const path = require('path');
65

76
const MAX_RESOLUTIONS = 5
87
const MIN_RESOLUTION_WIDTH = 320
@@ -18,7 +17,6 @@ class ValidationError extends Error {
1817
}
1918

2019
function validateProjectToken(options) {
21-
console.log("options", options);
2220
if (process.env.PROJECT_TOKEN) {
2321
return axios.get(constants[options.env].AUTH_URL, {
2422
headers: {
@@ -39,7 +37,7 @@ function validateProjectToken(options) {
3937
});
4038
}
4139
else {
42-
console.log('[smartui] Error: please set PROJECT_TOKEN key, refer to https://smartui.lambdatest.com');
40+
console.log('[smartui] Error: No PROJECT_TOKEN set');
4341
process.exit(constants.ERROR_CATCHALL);
4442
}
4543
};
@@ -187,22 +185,6 @@ function validateConfigResolutions(resolutions) {
187185
return res
188186
}
189187

190-
function isJSONFile(filePath) {
191-
const extension = path.extname(filePath);
192-
return extension.toLowerCase() === '.json';
193-
}
194-
195-
// Parse the JSON data
196-
function parse(file) {
197-
const data = fs.readFileSync(file, 'utf-8');
198-
return JSON.parse(data);
199-
}
200-
201-
// Verify Screenshot config
202-
function validateScreenshotConfig(configFile) {
203-
// Verify config file exists
204-
}
205-
206188
module.exports = {
207189
ValidationError,
208190
validateProjectToken,
@@ -211,8 +193,5 @@ module.exports = {
211193
validateLatestBuild,
212194
validateConfig,
213195
validateConfigBrowsers,
214-
validateConfigResolutions,
215-
isJSONFile,
216-
parse,
217-
validateScreenshotConfig
196+
validateConfigResolutions
218197
};

index.js

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,10 @@
33
const { Command, Option } = require('commander');
44
const program = new Command();
55
const { storybook } = require('./commands/storybook');
6-
const { validateProjectToken, validateLatestBuild, validateConfig, isJSONFile, parse, validateScreenshotConfig } = require('./commands/utils/validate');
6+
const { validateProjectToken, validateLatestBuild, validateConfig } = require('./commands/utils/validate');
77
const { createConfig } = require('./commands/config');
88
const { version } = require('./package.json');
99
const { checkUpdate } = require('./commands/utils/package');
10-
const fs = require('fs');
11-
const { capture } = require('./commands/capture');
12-
var { constants } = require('./commands/utils/constants');
13-
1410

1511
program
1612
.name('smartui')
@@ -54,23 +50,4 @@ program.command('storybook')
5450
storybook(serve, options);
5551
});
5652

57-
program.command('capture <file>')
58-
.description('Process JSON file and Capture URLs')
59-
.option('-c --config <file>', 'Config file path')
60-
.action(async (file, options) => {
61-
console.log('SmartUI Capture CLI v' + version);
62-
console.log('\n');
63-
if(!isJSONFile(file)){
64-
console.log('capture command only supports json file');
65-
process.exit(constants.ERROR_CATCHALL);
66-
}
67-
screenshots = parse(file);
68-
console.log(screenshots);
69-
options.env = program.opts().env || 'prod';
70-
await validateScreenshotConfig(screenshots);
71-
//verify PROJECT_TOKEN
72-
await validateProjectToken(options);
73-
await capture(screenshots, options);
74-
});
75-
7653
program.parse();

0 commit comments

Comments
 (0)