New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@applitools/dom-utils

Package Overview
Dependencies
Maintainers
12
Versions
78
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@applitools/dom-utils - npm Package Compare versions

Comparing version 1.1.0 to 2.0.1

108

lib/DomCapture.js

@@ -11,3 +11,3 @@ 'use strict';

const { Location, GeneralUtils, PerformanceUtils } = require('@applitools/eyes.sdk.core');
const { Location, GeneralUtils, PerformanceUtils } = require('@applitools/eyes-sdk-core');

@@ -27,3 +27,10 @@ class DomCapture {

constructor() {
/**
* @param {Logger} logger
* @param {EyesWebDriver|WebDriver} driver
*/
constructor(logger, driver) {
this._logger = logger;
this._driver = driver;
this._frameBundledCssPromises = [];

@@ -34,5 +41,5 @@ }

* @param {Logger} logger A Logger instance.
* @param {EyesWebDriver} driver
* @param {EyesWebDriver|WebDriver} driver
* @param {PositionProvider} [positionProvider]
* @return {Promise.<string>}
* @return {Promise<string>}
*/

@@ -58,3 +65,3 @@ static async getFullWindowDom(logger, driver, positionProvider) {

* @param {EyesWebDriver} driver
* @return {Promise.<string>}
* @return {Promise<string>}
*/

@@ -90,4 +97,4 @@ static async getWindowDom(logger, driver) {

const domCapture = new DomCapture();
await domCapture._getFrameDom(logger, driver, { childNodes: [domTree], tagName: 'OUTER_HTML' });
const domCapture = new DomCapture(logger, driver);
await domCapture._getFrameDom({ childNodes: [domTree], tagName: 'OUTER_HTML' });
await Promise.all(domCapture._frameBundledCssPromises);

@@ -98,10 +105,8 @@ return domTree;

/**
* @param {Logger} logger
* @param {EyesWebDriver} driver
* @param {object} domTree
* @return {Promise.<object>}
* @return {Promise<object>}
* @private
*/
async _getFrameDom(logger, driver, domTree) {
const tagName = domTree.tagName;
async _getFrameDom(domTree) {
const { tagName } = domTree;

@@ -114,6 +119,6 @@ if (!tagName) {

await this._loop(logger, driver, domTree, async domSubTree => {
await driver.switchTo().frame(frameIndex);
await this._getFrameDom(logger, driver, domSubTree);
await driver.switchTo().parentFrame();
await this._loop(domTree, async domSubTree => {
await this._driver.switchTo().frame(frameIndex);
await this._getFrameDom(domSubTree);
await this._driver.switchTo().parentFrame();
frameIndex += 1;

@@ -123,6 +128,3 @@ });

/**
* @param {Logger} logger
* @param {EyesWebDriver} driver
* @param {object} domTree

@@ -133,4 +135,4 @@ * @param {function} fn

*/
async _loop(logger, driver, domTree, fn) {
const childNodes = domTree.childNodes;
async _loop(domTree, fn) {
const { childNodes } = domTree;
if (!childNodes) {

@@ -146,3 +148,3 @@ return;

if (node && node.tagName.toUpperCase() === 'HTML') {
await this._getFrameBundledCss(logger, driver, node);
await this._getFrameBundledCss(node);
}

@@ -161,4 +163,2 @@

/**
* @param {Logger} logger
* @param {EyesWebDriver} driver
* @param node

@@ -168,14 +168,14 @@ * @return {Promise<void>}

*/
async _getFrameBundledCss(logger, driver, node) {
const currentUrl = await driver.getCurrentUrl();
async _getFrameBundledCss(node) {
const currentUrl = await this._driver.getCurrentUrl();
if (!GeneralUtils.isAbsoluteUrl(currentUrl)) {
logger.verbose('WARNING! Base URL is not an absolute URL!');
this._logger.verbose('WARNING! Base URL is not an absolute URL!');
}
const timeStart = PerformanceUtils.start();
const result = await driver.executeScript(DomCapture.CAPTURE_CSSOM_SCRIPT);
logger.verbose(`executing javascript to capture css took ${timeStart.end().summary}`);
const result = await this._driver.executeScript(DomCapture.CAPTURE_CSSOM_SCRIPT);
this._logger.verbose(`executing javascript to capture css took ${timeStart.end().summary}`);
const promise = this._processFrameBundledCss(logger, driver, currentUrl, node, result);
const promise = this._processFrameBundledCss(currentUrl, node, result);
this._frameBundledCssPromises.push(promise);

@@ -185,4 +185,2 @@ }

/**
* @param {Logger} logger
* @param {EyesWebDriver} driver
* @param {string} currentUrl

@@ -194,3 +192,3 @@ * @param node

*/
async _processFrameBundledCss(logger, driver, currentUrl, node, result) {
async _processFrameBundledCss(currentUrl, node, result) {
let sb = '';

@@ -201,13 +199,13 @@ for (const item of result) {

const value = item.substring(5);
logger.verbose(`splitting css result item took ${timeStart.end().summary}`);
this._logger.verbose(`splitting css result item took ${timeStart.end().summary}`);
let css;
if (kind === 'text:') {
css = await this._parseAndSerializeCss(logger, currentUrl, value);
css = await this._parseAndSerializeCss(currentUrl, value);
} else {
css = await this._downloadCss(logger, currentUrl, value);
css = await this._downloadCss(currentUrl, value);
}
css = await this._parseAndSerializeCss(logger, currentUrl, css);
css = await this._parseAndSerializeCss(currentUrl, css);
timeStart = PerformanceUtils.start();
sb += css;
logger.verbose(`appending CSS to StringBuilder took ${timeStart.end().summary}`);
this._logger.verbose(`appending CSS to StringBuilder took ${timeStart.end().summary}`);
}

@@ -219,3 +217,2 @@

/**
* @param {Logger} logger
* @param {string} baseUri

@@ -226,3 +223,3 @@ * @param {string} css

*/
async _parseAndSerializeCss(logger, baseUri, css) {
async _parseAndSerializeCss(baseUri, css) {
const timeStart = PerformanceUtils.start();

@@ -236,5 +233,5 @@ let stylesheet;

}
logger.verbose(`parsing CSS string took ${timeStart.end().summary}`);
this._logger.verbose(`parsing CSS string took ${timeStart.end().summary}`);
css = await this._serializeCss(logger, baseUri, stylesheet);
css = await this._serializeCss(baseUri, stylesheet);
return css;

@@ -244,3 +241,2 @@ }

/**
* @param {Logger} logger
* @param {string} baseUri

@@ -251,3 +247,3 @@ * @param {object} stylesheet

*/
async _serializeCss(logger, baseUri, stylesheet) {
async _serializeCss(baseUri, stylesheet) {
const timeStart = PerformanceUtils.start();

@@ -260,10 +256,10 @@ let sb = '';

if (ruleSet.name === 'import') {
logger.verbose('encountered @import rule');
this._logger.verbose('encountered @import rule');
const href = cssUrlParser(ruleSet.parameters);
css = await this._downloadCss(logger, baseUri, href[0]);
css = await this._downloadCss(baseUri, href[0]);
css = css.trim();
logger.verbose(`imported CSS (whitespaces trimmed) length: ${css.length}`);
this._logger.verbose(`imported CSS (whitespaces trimmed) length: ${css.length}`);
addAsIs = css.length === 0;
if (!addAsIs) {
css = await this._parseAndSerializeCss(logger, baseUri, css);
css = await this._parseAndSerializeCss(baseUri, css);
sb += css;

@@ -274,5 +270,2 @@ }

if (addAsIs) {
const node = {
rules: [ruleSet],
};
const stringifier = new shadyCss.Stringifier();

@@ -283,3 +276,3 @@ sb += stringifier.stringify(ruleSet);

logger.verbose(`serializing CSS to StringBuilder took ${timeStart.end().summary}`);
this._logger.verbose(`serializing CSS to StringBuilder took ${timeStart.end().summary}`);
return sb.toString();

@@ -289,3 +282,2 @@ }

/**
* @param {Logger} logger
* @param {string} baseUri

@@ -297,5 +289,5 @@ * @param {string} value

*/
async _downloadCss(logger, baseUri, value, retriesCount = 1) {
async _downloadCss(baseUri, value, retriesCount = 1) {
try {
logger.verbose(`Given URL to download: ${value}`);
this._logger.verbose(`Given URL to download: ${value}`);
// let href = cssParser.parse(value);

@@ -310,9 +302,9 @@ let href = value;

const css = response.data;
logger.verbose(`downloading CSS in length of ${css.length} chars took ${timeStart.end().summary}`);
this._logger.verbose(`downloading CSS in length of ${css.length} chars took ${timeStart.end().summary}`);
return css;
} catch (ex) {
logger.verbose(ex.toString());
this._logger.verbose(ex.toString());
if (retriesCount > 0) {
retriesCount -= 1;
return this._downloadCss(logger, baseUri, value, retriesCount);
return this._downloadCss(baseUri, value, retriesCount);
}

@@ -319,0 +311,0 @@ return '';

@@ -23,6 +23,5 @@ /* eslint-disable */

}
} catch (ex) {
} finally {
return obj;
} catch (ignored) {
}
return obj;
}

@@ -46,3 +45,3 @@

if (el.hasAttributes()) {
var attrs = el.attributes;
const attrs = el.attributes;
for (const p of attrs) {

@@ -52,4 +51,3 @@ attributes[p.name] = p.value;

}
}
else {
} else {
if (attributeProps.all) {

@@ -67,2 +65,3 @@ for (const p of attributeProps.all) {

}
return {

@@ -69,0 +68,0 @@ tagName,

{
"name": "@applitools/dom-utils",
"version": "1.1.0",
"version": "2.0.1",
"description": "Applitools DOM Utils is a shared utility package",

@@ -27,3 +27,3 @@ "keywords": [

"dependencies": {
"@applitools/eyes.sdk.core": "^2.2.2",
"@applitools/eyes-sdk-core": "^4.0.1",
"axios": "^0.18.0",

@@ -34,10 +34,8 @@ "css-url-parser": "^1.1.3",

"devDependencies": {
"chromedriver": "^2.43.1",
"dateformat": "^3.0.3",
"mocha": "^5.2.0",
"selenium-webdriver": "^4.0.0-alpha.1"
"selenium-webdriver": "^4.0.0-alpha.1",
"chromedriver": "^2.43.1"
},
"scripts": {
"test:unit": "mocha ./test/unit/**/*.spec.js -t 900000",
"test": "npm run test:unit"
"test": "mocha ./test/**/*.spec.js -t 900000"
},

@@ -44,0 +42,0 @@ "license": "SEE LICENSE IN LICENSE",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc