percy-seleniumjs
Advanced tools
Comparing version 0.1.0-alpha.1 to 0.1.0-alpha.2
@@ -1,37 +0,25 @@ | ||
"use strict"; | ||
// This is a clone of | ||
// https://github.com/percy/percy-webdriverio/blob/master/src/fileSystemAssetLoader.js | ||
exports.__esModule = true; | ||
exports.default = void 0; | ||
import fs from 'fs'; | ||
import path from 'path'; | ||
import mime from 'mime-types'; | ||
import walk from 'walk'; | ||
var _fs = _interopRequireDefault(require("fs")); | ||
var _path = _interopRequireDefault(require("path")); | ||
var _mimeTypes = _interopRequireDefault(require("mime-types")); | ||
var _walk = _interopRequireDefault(require("walk")); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
// This is a clone of | ||
// https://github.com/percy/percy-webdriverio/blob/master/src/fileSystemAssetLoader.js | ||
const MAX_FILE_SIZE_BYTES = 15728640; | ||
const DEFAULT_SKIPPED_ASSETS = []; | ||
class FileSystemAssetLoader { | ||
export default class FileSystemAssetLoader { | ||
constructor(options) { | ||
this.options = options; | ||
this.options.skippedAssets = this.options.skippedAssets || DEFAULT_SKIPPED_ASSETS; | ||
this.options.skippedAssets = | ||
this.options.skippedAssets || DEFAULT_SKIPPED_ASSETS; | ||
} | ||
findBuildResources(percyClient) { | ||
return new Promise((resolve, reject) => { | ||
const { | ||
options | ||
} = this; | ||
const { | ||
buildDir | ||
} = options; | ||
let mountPath = `${options.mountPath || ''}`; // Only add a / to the mountPath if it doesn't already end in one. | ||
const { options } = this; | ||
const { buildDir } = options; | ||
let mountPath = `${options.mountPath || ''}`; | ||
// Only add a / to the mountPath if it doesn't already end in one. | ||
if (mountPath.slice(-1) !== '/') { | ||
@@ -42,5 +30,4 @@ mountPath += '/'; | ||
let isDirectory = false; | ||
try { | ||
isDirectory = _fs.default.statSync(buildDir).isDirectory(); | ||
isDirectory = fs.statSync(buildDir).isDirectory(); | ||
} catch (err) { | ||
@@ -54,12 +41,9 @@ reject(err); | ||
let errors; | ||
_walk.default.walkSync(buildDir, { | ||
walk.walkSync(buildDir, { | ||
followLinks: true, | ||
listeners: { | ||
file: function file(root, fileStats, next) { | ||
const absolutePath = _path.default.join(root, fileStats.name); | ||
const absolutePath = path.join(root, fileStats.name); | ||
let resourceUrl = absolutePath; | ||
if (_path.default.sep === '\\') { | ||
if (path.sep === '\\') { | ||
// Windows: transform filesystem backslashes into forward-slashes for the URL. | ||
@@ -81,16 +65,18 @@ resourceUrl = resourceUrl.replace(/\\/g, '/'); | ||
} | ||
if (_fs.default.statSync(absolutePath).size > MAX_FILE_SIZE_BYTES) { | ||
if (fs.statSync(absolutePath).size > MAX_FILE_SIZE_BYTES) { | ||
// eslint-disable-next-line no-console | ||
console.warn('\n[percy][WARNING] Skipping large file: ', resourceUrl); | ||
console.warn( | ||
'\n[percy][WARNING] Skipping large file: ', | ||
resourceUrl, | ||
); | ||
return; | ||
} | ||
const content = _fs.default.readFileSync(absolutePath); | ||
resources.push(percyClient.makeResource({ | ||
resourceUrl: encodeURI(`${mountPath}${resourceUrl}`), | ||
content, | ||
mimetype: _mimeTypes.default.lookup(resourceUrl) | ||
})); | ||
const content = fs.readFileSync(absolutePath); | ||
resources.push( | ||
percyClient.makeResource({ | ||
resourceUrl: encodeURI(`${mountPath}${resourceUrl}`), | ||
content, | ||
mimetype: mime.lookup(resourceUrl), | ||
}), | ||
); | ||
next(); | ||
@@ -101,6 +87,5 @@ }, | ||
next(); | ||
} | ||
} | ||
}, | ||
}, | ||
}); | ||
if (resources.length === 0 && errors) { | ||
@@ -116,5 +101,2 @@ reject(errors); | ||
} | ||
} | ||
exports.default = FileSystemAssetLoader; |
@@ -1,25 +0,15 @@ | ||
"use strict"; | ||
import PercyClient from 'percy-client'; | ||
exports.__esModule = true; | ||
exports.default = void 0; | ||
import FileSystemAssetLoader from './fileSystemAssetLoader'; | ||
var _percyClient = _interopRequireDefault(require("percy-client")); | ||
var _fileSystemAssetLoader = _interopRequireDefault(require("./fileSystemAssetLoader")); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
class PercySeleniumClient { | ||
constructor({ | ||
driver, | ||
assetLoaderOpts, | ||
...clientOptions | ||
}) { | ||
this.percyClient = new _percyClient.default({ | ||
export default class PercySeleniumClient { | ||
constructor({ driver, assetLoaderOpts, ...clientOptions }) { | ||
this.percyClient = new PercyClient({ | ||
token: process.env.PERCY_TOKEN, | ||
apIUrl: process.env.PERCY_API, | ||
clientInfo: 'percy-seleniumjs', | ||
...clientOptions | ||
...clientOptions, | ||
}); | ||
this.assetLoader = new _fileSystemAssetLoader.default(assetLoaderOpts); | ||
this.assetLoader = new FileSystemAssetLoader(assetLoaderOpts); | ||
this.driver = driver; | ||
@@ -29,3 +19,9 @@ } | ||
parseMissingResources(response) { | ||
return response.body.data && response.body.data.relationships && response.body.data.relationships['missing-resources'] && response.body.data.relationships['missing-resources'].data || []; | ||
return ( | ||
(response.body.data && | ||
response.body.data.relationships && | ||
response.body.data.relationships['missing-resources'] && | ||
response.body.data.relationships['missing-resources'].data) || | ||
[] | ||
); | ||
} | ||
@@ -35,17 +31,25 @@ | ||
const missingResources = this.parseMissingResources(response); | ||
return Promise.all(missingResources.map(missingResource => this.percyClient.uploadResource(this.buildId, shaToResource[missingResource.id].content))); | ||
return Promise.all( | ||
missingResources.map(missingResource => | ||
this.percyClient.uploadResource( | ||
this.buildId, | ||
shaToResource[missingResource.id].content, | ||
), | ||
), | ||
); | ||
} | ||
async createBuild() { | ||
const resources = await this.assetLoader.findBuildResources(this.percyClient); | ||
const buildResponse = await this.percyClient.createBuild({ | ||
resources | ||
}); | ||
const resources = await this.assetLoader.findBuildResources( | ||
this.percyClient, | ||
); | ||
const buildResponse = await this.percyClient.createBuild({ resources }); | ||
this.buildId = buildResponse.body.data.id; | ||
const shaToResource = {}; | ||
for (const resource of resources) { | ||
shaToResource[resource.sha] = resource; | ||
} | ||
await this.uploadMissingResources(buildResponse, shaToResource); | ||
@@ -60,5 +64,9 @@ } | ||
isRoot: true, | ||
mimetype: 'text/html' | ||
mimetype: 'text/html', | ||
}); | ||
const snapshotResponse = await this.percyClient.createSnapshot(this.buildId, [rootResource], options); | ||
const snapshotResponse = await this.percyClient.createSnapshot( | ||
this.buildId, | ||
[rootResource], | ||
options, | ||
); | ||
const snapshotId = snapshotResponse.body.data.id; | ||
@@ -74,5 +82,2 @@ const shaToResource = {}; | ||
} | ||
} | ||
exports.default = PercySeleniumClient; |
{ | ||
"name": "percy-seleniumjs", | ||
"version": "0.1.0-alpha.1", | ||
"version": "0.1.0-alpha.2", | ||
"description": "Unofficial SeleniumJS SDK for Percy. Works with Protractor too.", | ||
"main": "lib/index.js", | ||
"scripts": { | ||
"build": "rimraf lib/* && babel src --out-dir lib --delete-dir-on-start", | ||
"lint": "eslint ." | ||
@@ -21,2 +20,5 @@ }, | ||
}, | ||
"engines": { | ||
"node": ">=10.0.0" | ||
}, | ||
"prettier": { | ||
@@ -44,12 +46,6 @@ "printWidth": 79, | ||
"devDependencies": { | ||
"@4c/babel-preset-4catalyzer": "^3.1.1", | ||
"@babel/cli": "^7.1.2", | ||
"@babel/core": "^7.1.6", | ||
"@babel/node": "^7.0.0", | ||
"babel-eslint": "^10.0.1", | ||
"babel-loader": "^8.0.4", | ||
"eslint": "^5.6.1", | ||
"eslint-config-4catalyzer": "^0.4.4", | ||
"eslint-config-prettier": "^3.1.0", | ||
"eslint-plugin-babel": "^5.2.1", | ||
"eslint-plugin-import": "^2.14.0", | ||
@@ -56,0 +52,0 @@ "eslint-plugin-prettier": "^3.0.0", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
11
156
8813