@lambdatest/smartui-cli 2.0.3 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +81 -18
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -196,9 +196,9 @@ var DEFAULT_CONFIG = {
|
|
|
196
196
|
"edge"
|
|
197
197
|
],
|
|
198
198
|
viewports: [
|
|
199
|
-
[1920
|
|
200
|
-
[1366
|
|
201
|
-
[360
|
|
199
|
+
[1920],
|
|
200
|
+
[1366],
|
|
201
|
+
[360]
|
|
202
202
|
],
|
|
203
203
|
waitForTimeout: 1e3
|
|
204
204
|
}
|
|
@@ -237,13 +237,13 @@ function createWebStaticConfig(filepath) {
|
|
|
237
237
|
}
|
|
238
238
|
|
|
239
239
|
// package.json
|
|
240
|
-
var version = "2.0.
|
|
240
|
+
var version = "2.0.4";
|
|
241
241
|
var ajv = new Ajv__default.default({ allErrors: true });
|
|
242
242
|
ajv.addFormat("web-url", {
|
|
243
243
|
type: "string",
|
|
244
244
|
validate: (url) => {
|
|
245
245
|
const urlPattern = new RegExp("^(https?:\\/\\/)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*(\\?[;&a-z\\d%_.~+=-]*)?(\\#[-a-z\\d_]*)?$", "i");
|
|
246
|
-
return urlPattern.test(url);
|
|
246
|
+
return urlPattern.test(url.trim());
|
|
247
247
|
}
|
|
248
248
|
});
|
|
249
249
|
addErrors__default.default(ajv);
|
|
@@ -264,17 +264,26 @@ var ConfigSchema = {
|
|
|
264
264
|
type: "array",
|
|
265
265
|
items: {
|
|
266
266
|
type: "array",
|
|
267
|
-
|
|
268
|
-
{
|
|
269
|
-
|
|
267
|
+
oneOf: [
|
|
268
|
+
{
|
|
269
|
+
items: [{ type: "number", minimum: 320, maximum: 7680 }],
|
|
270
|
+
minItems: 1,
|
|
271
|
+
maxItems: 1
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
items: [
|
|
275
|
+
{ type: "number", minimum: 320, maximum: 7680 },
|
|
276
|
+
{ type: "number", minimum: 320, maximum: 7680 }
|
|
277
|
+
],
|
|
278
|
+
minItems: 2,
|
|
279
|
+
maxItems: 2
|
|
280
|
+
}
|
|
270
281
|
],
|
|
271
|
-
|
|
272
|
-
minItems: 2,
|
|
273
|
-
maxItems: 2
|
|
282
|
+
errorMessage: "Invalid config; width/height must be >= 320 and <= 7680"
|
|
274
283
|
},
|
|
275
284
|
uniqueItems: true,
|
|
276
285
|
maxItems: 5,
|
|
277
|
-
errorMessage: "Invalid config;
|
|
286
|
+
errorMessage: "Invalid config; max unique viewports allowed - 5"
|
|
278
287
|
},
|
|
279
288
|
waitForPageRender: {
|
|
280
289
|
type: "number",
|
|
@@ -326,11 +335,55 @@ var WebStaticConfigSchema = {
|
|
|
326
335
|
};
|
|
327
336
|
var validateConfig = ajv.compile(ConfigSchema);
|
|
328
337
|
var validateWebStaticConfig = ajv.compile(WebStaticConfigSchema);
|
|
338
|
+
var HTTP_SCHEME = "https:";
|
|
339
|
+
var HTTP_SCHEME_PREFIX = "https://";
|
|
340
|
+
var WWW = "www.";
|
|
329
341
|
function delDir(dir) {
|
|
330
342
|
if (fs__default.default.existsSync(dir)) {
|
|
331
343
|
fs__default.default.rmSync(dir, { recursive: true });
|
|
332
344
|
}
|
|
333
345
|
}
|
|
346
|
+
function ensureHttps(urlString) {
|
|
347
|
+
try {
|
|
348
|
+
if (urlString && urlString.startsWith(WWW)) {
|
|
349
|
+
urlString = HTTP_SCHEME_PREFIX + urlString;
|
|
350
|
+
}
|
|
351
|
+
let url = new URL(urlString);
|
|
352
|
+
if (url.protocol !== HTTP_SCHEME) {
|
|
353
|
+
url.protocol = HTTP_SCHEME;
|
|
354
|
+
}
|
|
355
|
+
return url.toString();
|
|
356
|
+
} catch (error) {
|
|
357
|
+
console.error("Invalid URL: " + urlString, error);
|
|
358
|
+
return null;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
function scrollToBottomAndBackToTop({
|
|
362
|
+
frequency = 100,
|
|
363
|
+
timing = 8,
|
|
364
|
+
remoteWindow = window
|
|
365
|
+
} = {}) {
|
|
366
|
+
return new Promise((resolve) => {
|
|
367
|
+
let scrolls = 1;
|
|
368
|
+
let scrollLength = remoteWindow.document.body.scrollHeight / frequency;
|
|
369
|
+
(function scroll() {
|
|
370
|
+
let scrollBy = scrollLength * scrolls;
|
|
371
|
+
remoteWindow.setTimeout(() => {
|
|
372
|
+
remoteWindow.scrollTo(0, scrollBy);
|
|
373
|
+
if (scrolls < frequency) {
|
|
374
|
+
scrolls += 1;
|
|
375
|
+
scroll();
|
|
376
|
+
}
|
|
377
|
+
if (scrolls === frequency) {
|
|
378
|
+
remoteWindow.setTimeout(() => {
|
|
379
|
+
remoteWindow.scrollTo(0, 0);
|
|
380
|
+
resolve();
|
|
381
|
+
}, timing);
|
|
382
|
+
}
|
|
383
|
+
}, timing);
|
|
384
|
+
})();
|
|
385
|
+
});
|
|
386
|
+
}
|
|
334
387
|
|
|
335
388
|
// src/lib/httpClient.ts
|
|
336
389
|
var httpClient = class {
|
|
@@ -461,7 +514,7 @@ var ctx_default = (options) => {
|
|
|
461
514
|
process.exit();
|
|
462
515
|
}
|
|
463
516
|
for (let viewport of config.web.viewports)
|
|
464
|
-
viewports.push({ width: viewport[0], height: viewport[1] });
|
|
517
|
+
viewports.push({ width: viewport[0], height: viewport[1] || 0 });
|
|
465
518
|
return {
|
|
466
519
|
env,
|
|
467
520
|
log: logger_default,
|
|
@@ -685,6 +738,7 @@ var BROWSER_FIREFOX = "firefox";
|
|
|
685
738
|
var BROWSER_EDGE = "edge";
|
|
686
739
|
var EDGE_CHANNEL = "msedge";
|
|
687
740
|
var PW_WEBKIT = "webkit";
|
|
741
|
+
var MIN_RESOLUTION_HEIGHT = 320;
|
|
688
742
|
function captureScreenshots(ctx, screenshots) {
|
|
689
743
|
return __async(this, null, function* () {
|
|
690
744
|
var _a;
|
|
@@ -692,6 +746,7 @@ function captureScreenshots(ctx, screenshots) {
|
|
|
692
746
|
let totalBrowsers = ctx.webConfig.browsers.length;
|
|
693
747
|
let totalViewports = ctx.webConfig.viewports.length;
|
|
694
748
|
let totalScreenshots = screenshots.length;
|
|
749
|
+
let capturedScreenshots = 0;
|
|
695
750
|
for (let i = 0; i < totalBrowsers; i++) {
|
|
696
751
|
let browserName = (_a = ctx.webConfig.browsers[i]) == null ? void 0 : _a.toLowerCase();
|
|
697
752
|
let browser;
|
|
@@ -718,17 +773,25 @@ function captureScreenshots(ctx, screenshots) {
|
|
|
718
773
|
let screenshot = screenshots[j];
|
|
719
774
|
let screenshotId = screenshot.name.toLowerCase().replace(/\s/g, "-");
|
|
720
775
|
const page = yield context.newPage();
|
|
776
|
+
if (screenshot.url) {
|
|
777
|
+
screenshot.url = screenshot.url.trim();
|
|
778
|
+
screenshot.url = ensureHttps(screenshot.url);
|
|
779
|
+
}
|
|
721
780
|
yield page.goto(screenshot.url, pageOptions);
|
|
722
|
-
yield page.waitForTimeout(screenshot.waitForTimeout || 0);
|
|
723
781
|
for (let k = 0; k < totalViewports; k++) {
|
|
724
782
|
let { width, height } = ctx.webConfig.viewports[k];
|
|
725
783
|
let ssName = `${browserName}-${width}x${height}-${screenshotId}.png`;
|
|
726
784
|
let ssPath = `screenshots/${screenshotId}/${ssName}.png`;
|
|
727
|
-
yield page.setViewportSize({ width, height });
|
|
728
|
-
|
|
785
|
+
yield page.setViewportSize({ width, height: height || MIN_RESOLUTION_HEIGHT });
|
|
786
|
+
if (height === 0)
|
|
787
|
+
yield page.evaluate(scrollToBottomAndBackToTop);
|
|
788
|
+
yield page.waitForTimeout(screenshot.waitForTimeout || 0);
|
|
789
|
+
yield page.screenshot({ path: ssPath, fullPage: height ? false : true });
|
|
729
790
|
let completed = i == totalBrowsers - 1 && j == totalScreenshots - 1 && k == totalViewports - 1 ? true : false;
|
|
730
791
|
browserName = browserName === BROWSER_SAFARI ? PW_WEBKIT : browserName;
|
|
731
792
|
ctx.client.uploadScreenshot(ctx.build, ssPath, screenshot.name, browserName, `${width}x${height}`, completed);
|
|
793
|
+
capturedScreenshots++;
|
|
794
|
+
ctx.task.output = chalk__default.default.gray(`screenshots captured: ${capturedScreenshots}/${totalBrowsers * totalViewports * totalScreenshots}`);
|
|
732
795
|
}
|
|
733
796
|
yield page.close();
|
|
734
797
|
}
|
|
@@ -747,8 +810,8 @@ var captureScreenshots_default = (ctx) => {
|
|
|
747
810
|
title: "Capturing screenshots",
|
|
748
811
|
task: (ctx2, task) => __async(void 0, null, function* () {
|
|
749
812
|
try {
|
|
750
|
-
|
|
751
|
-
let totalScreenshots = yield captureScreenshots(ctx2,
|
|
813
|
+
ctx2.task = task;
|
|
814
|
+
let totalScreenshots = yield captureScreenshots(ctx2, ctx2.webStaticConfig);
|
|
752
815
|
task.title = "Screenshots captured successfully";
|
|
753
816
|
task.output = chalk__default.default.gray(`total screenshots: ${totalScreenshots}`);
|
|
754
817
|
} catch (error) {
|