@applitools/visual-grid-client
Advanced tools
Comparing version 4.2.4 to 4.2.5
{ | ||
"name": "@applitools/visual-grid-client", | ||
"version": "4.2.4", | ||
"version": "4.2.5", | ||
"description": "", | ||
@@ -5,0 +5,0 @@ "main": "src/visual-grid-client.js", |
@@ -25,3 +25,2 @@ 'use strict'; | ||
setError, | ||
resourceCache, | ||
wrappers, | ||
@@ -173,3 +172,3 @@ renderWrapper, | ||
const renderInfo = await renderInfoPromise; | ||
const bundledCss = getBundledCssFromCdt(cdt, resourceCache, url); | ||
const bundledCss = getBundledCssFromCdt(cdt, url); | ||
return await uploadResource( | ||
@@ -176,0 +175,0 @@ renderInfo.getResultsUrl(), |
@@ -16,2 +16,3 @@ 'use strict'; | ||
entry.value = value; | ||
return value; | ||
} | ||
@@ -38,2 +39,6 @@ | ||
function remove(key) { | ||
delete cache[key]; | ||
} | ||
const cache = {}; | ||
@@ -46,2 +51,3 @@ | ||
getWithDependencies, | ||
remove, | ||
}; | ||
@@ -48,0 +54,0 @@ } |
@@ -5,8 +5,8 @@ 'use strict'; | ||
function makeFetchResource(logger) { | ||
return url => { | ||
logger.log(`fetching ${url}`); | ||
return retryFetch( | ||
_retry => | ||
fetch(url).then(resp => | ||
function makeFetchResource(logger, retries = 5) { | ||
return url => | ||
retryFetch( | ||
retry => { | ||
logger.log(`fetching ${url} ${retry ? `(retry ${retry}/${retries})` : ''}`); | ||
return fetch(url).then(resp => | ||
resp.buffer().then(buff => ({ | ||
@@ -17,8 +17,11 @@ url, | ||
})), | ||
), | ||
{retries: 5}, | ||
); | ||
}; | ||
); | ||
}, | ||
{retries}, | ||
).then(result => { | ||
logger.log(`fetched ${url}`); | ||
return result; | ||
}); | ||
} | ||
module.exports = makeFetchResource; |
@@ -25,3 +25,20 @@ 'use strict'; | ||
function makeGetAllResources({resourceCache, fetchResource, extractCssResources}) { | ||
function makeProcessResource({ | ||
resourceCache, | ||
getOrFetchResources, | ||
extractCssResources, | ||
fetchCache, | ||
}) { | ||
return function processResource(resource) { | ||
const {url} = resource; | ||
return fetchCache.getValue(url) || fetchCache.setValue(url, doProcessResource(resource)); | ||
}; | ||
async function doProcessResource(resource) { | ||
let {dependentResources, fetchedResources} = await getDependantResources(resource); | ||
const rGridResource = fromFetchedToRGridResource(resource); | ||
resourceCache.setDependencies(resource.url, dependentResources); | ||
return Object.assign({[resource.url]: rGridResource}, fetchedResources); | ||
} | ||
async function getDependantResources({url, type, value}) { | ||
@@ -35,11 +52,15 @@ let dependentResources, fetchedResources; | ||
} | ||
} | ||
async function processResource(resource) { | ||
let {dependentResources, fetchedResources} = await getDependantResources(resource); | ||
const rGridResource = fromFetchedToRGridResource(resource); | ||
resourceCache.setDependencies(resource.url, dependentResources); | ||
return Object.assign({[resource.url]: rGridResource}, fetchedResources); | ||
} | ||
function makeGetAllResources({resourceCache, fetchResource, extractCssResources, fetchCache}) { | ||
const processResource = makeProcessResource({ | ||
resourceCache, | ||
extractCssResources, | ||
getOrFetchResources, | ||
fetchCache, | ||
}); | ||
async function getOrFetchResources(resourceUrls, preResources = {}) { | ||
return getOrFetchResources; | ||
async function getOrFetchResources(resourceUrls = [], preResources = {}) { | ||
const resources = {}; | ||
@@ -75,8 +96,4 @@ | ||
} | ||
return async (absoluteUrls = [], preResources) => | ||
await getOrFetchResources(absoluteUrls, preResources); | ||
} | ||
module.exports = makeGetAllResources; | ||
module.exports.isCss = isCss; |
@@ -30,4 +30,4 @@ 'use strict'; | ||
function makeGetBundledCssFromCdt(logger) { | ||
function getBundledCssFromCdt(cdt, resourceCache, baseUrl) { | ||
function makeGetBundledCssFromCdt({resourceCache, logger}) { | ||
return function getBundledCssFromCdt(cdt, baseUrl) { | ||
let bundledCss = ''; | ||
@@ -66,3 +66,3 @@ traverseCdt(cdt, node => { | ||
return bundledCss; | ||
} | ||
}; | ||
@@ -94,4 +94,2 @@ function getBundledCssFromCssText(cssText, resourceCache, resourceUrl) { | ||
} | ||
return (cdt, resourceCache, baseUrl) => getBundledCssFromCdt(cdt, resourceCache, baseUrl); | ||
} | ||
@@ -98,0 +96,0 @@ |
@@ -15,4 +15,5 @@ 'use strict'; | ||
getAllResources, | ||
resourceCache, | ||
renderThroat, | ||
renderInfoPromise, | ||
renderWrapper, | ||
}) { | ||
@@ -47,2 +48,6 @@ return async function openEyes({ | ||
}) { | ||
if (getError()) { | ||
throw getError(); | ||
} | ||
const logger = createLogger(showLogs); | ||
@@ -69,3 +74,2 @@ | ||
initWrappers({count: browsers.length, apiKey, logHandler: logger.getLogHandler()}); | ||
const renderWrapper = wrappers[0]; | ||
@@ -97,16 +101,2 @@ configureWrappers({ | ||
const renderInfoPromise = renderWrapper | ||
.getRenderInfo() | ||
.then(renderInfo => { | ||
renderWrapper.setRenderingInfo(renderInfo); | ||
return renderInfo; | ||
}) | ||
.catch(err => { | ||
if (err.response && err.response.status === 401) { | ||
setError(new Error('Unauthorized access to Eyes server. Please check your API key.')); | ||
} else { | ||
setError(err); | ||
} | ||
}); | ||
const checkWindow = makeCheckWindow({ | ||
@@ -126,3 +116,2 @@ getError, | ||
setError, | ||
resourceCache, | ||
wrappers, | ||
@@ -129,0 +118,0 @@ renderWrapper, |
@@ -6,3 +6,3 @@ 'use strict'; | ||
function makeRenderBatch({putResources, resourceCache}) { | ||
function makeRenderBatch({putResources, resourceCache, fetchCache, logger}) { | ||
return async function renderBatch(renderRequests, wrapper) { | ||
@@ -17,7 +17,9 @@ const runningRenders = await wrapper.renderBatch(renderRequests); | ||
await putResources(renderRequest.getDom(), runningRender, wrapper); | ||
for (const resource of renderRequest.getResources()) { | ||
wrapper._logger.verbose('adding resource to cache: ', resource.getUrl()); | ||
resourceCache.setValue(resource.getUrl(), toCacheEntry(resource)); | ||
} | ||
} | ||
for (const resource of renderRequest.getResources()) { | ||
logger.verbose('adding resource to cache: ', resource.getUrl()); | ||
const url = resource.getUrl(); | ||
fetchCache.remove(url); | ||
resourceCache.setValue(url, toCacheEntry(resource)); | ||
} | ||
}), | ||
@@ -29,3 +31,3 @@ ); | ||
if (runningRenders2.some(rr => rr.getRenderStatus() === RenderStatus.NEED_MORE_RESOURCES)) { | ||
wrapper._logger.log('unexpectedly got "need more resources" on second render request'); | ||
logger.log('unexpectedly got "need more resources" on second render request'); | ||
throw new Error('Unexpected error while taking screenshot'); | ||
@@ -32,0 +34,0 @@ } |
@@ -17,2 +17,3 @@ 'use strict'; | ||
const makeOpenEyesLimitedConcurrency = require('./openEyesLimitedConcurrency'); | ||
const EyesWrapper = require('./EyesWrapper'); | ||
@@ -28,2 +29,3 @@ function makeRenderingGridClient({ | ||
renderConcurrencyFactor = 5, | ||
wrapper, | ||
}) { | ||
@@ -41,12 +43,14 @@ const openEyesConcurrency = Number(getConfig({concurrency}).concurrency); | ||
const resourceCache = createResourceCache(); | ||
const fetchCache = createResourceCache(); | ||
const extractCssResources = makeExtractCssResources(logger); | ||
const fetchResource = makeFetchResource(logger); | ||
const extractCssResourcesFromCdt = makeExtractCssResourcesFromCdt(extractCssResources); | ||
const getBundledCssFromCdt = makeGetBundledCssFromCdt(logger); | ||
const getBundledCssFromCdt = makeGetBundledCssFromCdt({resourceCache, logger}); | ||
const putResources = makePutResources(); | ||
const renderBatch = makeRenderBatch({putResources, resourceCache}); | ||
const waitForRenderedStatus = makeWaitForRenderedStatus( | ||
renderStatusTimeout, | ||
renderStatusInterval, | ||
); | ||
const renderBatch = makeRenderBatch({putResources, resourceCache, fetchCache, logger}); | ||
const waitForRenderedStatus = makeWaitForRenderedStatus({ | ||
timeout: renderStatusTimeout, | ||
getStatusInterval: renderStatusInterval, | ||
logger, | ||
}); | ||
const getAllResources = makeGetAllResources({ | ||
@@ -56,4 +60,22 @@ resourceCache, | ||
fetchResource, | ||
fetchCache, | ||
}); | ||
wrapper = | ||
wrapper || new EyesWrapper({apiKey: getConfig().apiKey, logHandler: logger.getLogHandler()}); // TODO when organizing config, make this a default value in the function parameters | ||
const renderInfoPromise = wrapper | ||
.getRenderInfo() | ||
.then(renderInfo => { | ||
wrapper.setRenderingInfo(renderInfo); | ||
return renderInfo; | ||
}) | ||
.catch(err => { | ||
if (err.response && err.response.status === 401) { | ||
setError(new Error('Unauthorized access to Eyes server. Please check your API key.')); | ||
} else { | ||
setError(err); | ||
} | ||
}); | ||
const openEyes = makeOpenEyes({ | ||
@@ -67,4 +89,5 @@ setError, | ||
getAllResources, | ||
resourceCache, | ||
renderThroat, | ||
renderInfoPromise, | ||
renderWrapper: wrapper, | ||
}); | ||
@@ -71,0 +94,0 @@ const openEyesLimitedConcurrency = makeOpenEyesLimitedConcurrency( |
@@ -9,7 +9,7 @@ 'use strict'; | ||
function makeWaitForRenderedStatus(timeout = 120000, getStatusInterval = 500) { | ||
function makeWaitForRenderedStatus({timeout = 120000, getStatusInterval = 500, logger}) { | ||
return async function waitForRenderedStatus(renderIds, wrapper, stopCondition = () => {}) { | ||
async function getStatus() { | ||
if (timeoutReached) { | ||
wrapper._logger.verbose(`waitForRenderedStatus: timeout reached for ${renderIds}`); | ||
logger.verbose(`waitForRenderedStatus: timeout reached for ${renderIds}`); | ||
throw new Error(`failed to render screenshot`); | ||
@@ -39,3 +39,3 @@ } | ||
} | ||
wrapper._logger.log(`error during getRenderStatus: ${ex}`); | ||
logger.log(`error during getRenderStatus: ${ex}`); | ||
await psetTimeout(getStatusInterval); | ||
@@ -42,0 +42,0 @@ return await getStatus(); |
61760
1585