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
14
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 4.5.3 to 4.6.0

12

CHANGELOG.md

@@ -6,2 +6,14 @@ # Change Log

# [4.6.0](https://github.com/applitools/eyes.sdk.javascript1/compare/@applitools/dom-utils@4.5.3...@applitools/dom-utils@4.6.0) (2019-02-19)
### Bug Fixes
* **dom-utils:** fix regexp for replacing unfetched CSSs ([8d81b47](https://github.com/applitools/eyes.sdk.javascript1/commit/8d81b47))
* **dom-utils:** update `@applitools/dom-capture` to version 7.0.5 ([96f1b2c](https://github.com/applitools/eyes.sdk.javascript1/commit/96f1b2c))
## [4.5.3](https://github.com/applitools/eyes.sdk.javascript1/compare/@applitools/dom-utils@4.5.2...@applitools/dom-utils@4.5.3) (2019-02-14)

@@ -8,0 +20,0 @@

94

lib/DomCapture.js

@@ -9,2 +9,7 @@ 'use strict';

const DomCaptureReturnType = {
OBJECT: 'OBJECT',
STRING: 'STRING',
};
class DomCapture {

@@ -25,6 +30,6 @@

* @param {PositionProvider} [positionProvider]
* @param {string} [returnType]
* @param {DomCaptureReturnType} [returnType]
* @return {Promise<string|object>}
*/
static async getFullWindowDom(logger, driver, positionProvider, returnType = 'string') {
static async getFullWindowDom(logger, driver, positionProvider, returnType = DomCaptureReturnType.STRING) {
ArgumentGuard.notNull(logger, 'logger');

@@ -46,7 +51,7 @@ ArgumentGuard.notNull(driver, 'driver');

return returnType === 'object' ? dom : JSON.stringify(dom);
return returnType === DomCaptureReturnType.OBJECT ? JSON.parse(dom) : dom;
}
/**
* @return {Promise<object>}
* @return {Promise<{string}>}
*/

@@ -63,19 +68,27 @@ async getWindowDom() {

let domSnapshot = await this.getFrameDom(asyncCaptureDomScript, url);
return JSON.parse(domSnapshot);
return this.getFrameDom(asyncCaptureDomScript, url);
}
/**
* @param script
* @param url
* @return {Promise<{string}>}
*/
async getFrameDom(script, url) {
let domSnapshot = await this.driver.executeAsyncScript(script);
let domSnapshotRaw = await this.driver.executeAsyncScript(script);
const cssIndex = domSnapshot.indexOf('#####');
const iframeIndex = domSnapshot.indexOf('@@@@@');
const separatorIndex = domSnapshot.indexOf('-----');
const domSnapshotRawArr = domSnapshotRaw ? domSnapshotRaw.split('\n') : [];
if (domSnapshotRawArr.length === 0 ) {
return {};
}
const separatorJson = JSON.parse(domSnapshotRawArr[0]);
const cssEndIndex = domSnapshotRawArr.indexOf(separatorJson.separator);
const iframeEndIndex = domSnapshotRawArr.indexOf(separatorJson.separator, cssEndIndex + 1);
let domSnapshot = domSnapshotRawArr[iframeEndIndex + 1];
let cssArr = [];
if (cssIndex !== -1 && cssIndex < separatorIndex) {
const cssSeparatorIndex = iframeIndex !== -1 && separatorIndex !== -1 ? Math.min(iframeIndex, separatorIndex) : Math.max(iframeIndex, separatorIndex);
const cssText = domSnapshot.substring(cssIndex + 6, cssSeparatorIndex);
cssArr = cssText.split('\n');
for (let i = 1; i < cssEndIndex; i++) {
cssArr.push(domSnapshotRawArr[i]);
}

@@ -94,15 +107,10 @@

for (const cssRes of cssResArr) {
domSnapshot = domSnapshot.replace(`#####${cssRes.href}#####`, cssRes.css);
domSnapshot = domSnapshot.replace(`"${separatorJson.cssStartToken}${cssRes.href}${separatorJson.cssEndToken}"`, cssRes.css);
}
let iframeArr = [];
if (iframeIndex !== -1 && iframeIndex < separatorIndex) {
const iframesText = domSnapshot.substring(iframeIndex + 6, separatorIndex);
iframeArr = iframesText.split('\n');
for (let i = cssEndIndex + 1; i < iframeEndIndex; i++) {
iframeArr.push(domSnapshotRawArr[i]);
}
if (cssIndex < separatorIndex && iframeIndex < separatorIndex && (cssIndex !== -1 || iframeIndex !== -1) && separatorIndex !== -1) {
domSnapshot = domSnapshot.substring(separatorIndex + 6);
}
for (const iframeXpath of iframeArr) {

@@ -112,3 +120,3 @@ if (!iframeXpath) {

}
await this._switchToFrame(iframeXpath);
const framesCount = await this._switchToFrame(iframeXpath);
let domIFrame;

@@ -120,4 +128,4 @@ try {

}
await this._driver.switchTo().parentFrame();
domSnapshot = domSnapshot.replace(`"@@@@@${iframeXpath}@@@@@"`, domIFrame);
await this._switchToParentFrame(framesCount);
domSnapshot = domSnapshot.replace(`"${separatorJson.iframeStartToken}${iframeXpath}${separatorJson.iframeEndToken}"`, domIFrame);
}

@@ -130,3 +138,3 @@

* @param {string|string[]} xpaths
* @return {Promise<void>}
* @return {Promise<number>}
* @private

@@ -139,8 +147,23 @@ */

const iframeEl = await this.driver.findElementByXPath(`/${xpaths[0]}`);
await this._driver.switchTo().frame(iframeEl);
let framesCount = 0;
for (const xpath of xpaths) {
const iframeEl = await this.driver.findElementByXPath(`/${xpath}`);
await this._driver.switchTo().frame(iframeEl);
framesCount = framesCount + 1;
}
if (xpaths.length > 1) {
await this._switchToFrame(xpaths.shift());
return framesCount;
}
/**
* @private
* @return {Promise<number>}
*/
async _switchToParentFrame(switchedToFrameCount) {
if (switchedToFrameCount > 0) {
await this._driver.switchTo().parentFrame();
return this._switchToParentFrame(switchedToFrameCount - 1);
}
return switchedToFrameCount;
}

@@ -158,11 +181,12 @@

this._logger.verbose(`Given URL to download: ${href}`);
let absHref = href;
if (!GeneralUtils.isAbsoluteUrl(href)) {
href = new URL(href.toString(), baseUri).href;
absHref = new URL(href.toString(), baseUri).href;
}
const timeStart = PerformanceUtils.start();
const response = await axios(href);
const response = await axios(absHref);
const css = response.data;
this._logger.verbose(`downloading CSS in length of ${css.length} chars took ${timeStart.end().summary}`);
return {'href': href, 'css': css};
return {'href': absHref, 'css': css};
} catch (ex) {

@@ -183,2 +207,4 @@ this._logger.verbose(ex.toString());

Object.freeze(DomCaptureReturnType);
exports.DomCaptureReturnType = DomCaptureReturnType;
exports.DomCapture = DomCapture;
{
"name": "@applitools/dom-utils",
"version": "4.5.3",
"version": "4.6.0",
"description": "Applitools DOM Utils is a shared utility package",

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

"dependencies": {
"@applitools/dom-capture": "^6.1.5",
"@applitools/eyes-common": "^1.2.4",
"@applitools/dom-capture": "^7.0.5",
"@applitools/eyes-common": "^1.3.0",
"axios": "^0.18.0"

@@ -45,3 +45,3 @@ },

},
"gitHead": "a3ac9dbb3fed4bb64a9afdc6d060d2f6ab09d1e1"
"gitHead": "1e1eb86043169895a3d1e5535fd123fe4a8217c1"
}
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