@percy/core 1.28.8-beta.4 → 1.28.8

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/config.js CHANGED
@@ -9,6 +9,9 @@ export const configSchema = {
9
9
  },
10
10
  token: {
11
11
  type: 'string'
12
+ },
13
+ labels: {
14
+ type: 'string'
12
15
  }
13
16
  }
14
17
  },
@@ -74,6 +77,9 @@ export const configSchema = {
74
77
  testCase: {
75
78
  type: 'string'
76
79
  },
80
+ labels: {
81
+ type: 'string'
82
+ },
77
83
  thTestCaseExecutionId: {
78
84
  type: 'string'
79
85
  },
@@ -328,6 +334,9 @@ export const snapshotSchema = {
328
334
  testCase: {
329
335
  $ref: '/config/snapshot#/properties/testCase'
330
336
  },
337
+ labels: {
338
+ $ref: '/config/snapshot#/properties/labels'
339
+ },
331
340
  thTestCaseExecutionId: {
332
341
  $ref: '/config/snapshot#/properties/thTestCaseExecutionId'
333
342
  },
package/dist/percy.js CHANGED
@@ -38,6 +38,7 @@ export class Percy {
38
38
  // implies `skipUploads` and `skipDiscovery`
39
39
  dryRun,
40
40
  // implies `dryRun`, silent logs, and adds extra api endpoints
41
+ labels,
41
42
  testing,
42
43
  // configuration filepath
43
44
  config: configFile,
@@ -53,12 +54,13 @@ export class Percy {
53
54
  // options which will become accessible via the `.config` property
54
55
  ...options
55
56
  } = {}) {
56
- var _config$percy;
57
+ var _config$percy, _config$percy2;
57
58
  let config = PercyConfig.load({
58
59
  overrides: options,
59
60
  path: configFile
60
61
  });
61
- deferUploads ?? (deferUploads = (_config$percy = config.percy) === null || _config$percy === void 0 ? void 0 : _config$percy.deferUploads);
62
+ labels ?? (labels = (_config$percy = config.percy) === null || _config$percy === void 0 ? void 0 : _config$percy.labels);
63
+ deferUploads ?? (deferUploads = (_config$percy2 = config.percy) === null || _config$percy2 === void 0 ? void 0 : _config$percy2.deferUploads);
62
64
  this.config = config;
63
65
  if (testing) loglevel = 'silent';
64
66
  if (loglevel) this.loglevel(loglevel);
@@ -69,11 +71,13 @@ export class Percy {
69
71
  this.skipDiscovery = this.dryRun || !!skipDiscovery;
70
72
  this.delayUploads = this.skipUploads || !!delayUploads;
71
73
  this.deferUploads = this.skipUploads || !!deferUploads;
74
+ this.labels = labels;
72
75
  this.client = new PercyClient({
73
76
  token,
74
77
  clientInfo,
75
78
  environmentInfo,
76
- config
79
+ config,
80
+ labels
77
81
  });
78
82
  if (server) this.server = createPercyServer(this, port);
79
83
  this.browser = new Browser(this);
@@ -358,6 +362,12 @@ export class Percy {
358
362
  }
359
363
 
360
364
  // validate comparison uploads and warn about any errors
365
+
366
+ // we are having two similar attrs in options: tags & tag
367
+ // tags: is used as labels and is string comma-separated like "tag1,tag"
368
+ // tag: is comparison-tag used by app-percy & poa and this is used to create a comparison-tag in BE
369
+ // its format is object like {name: "", os:"", os_version:"", device:""}
370
+ // DO NOT GET CONFUSED!!! :)
361
371
  if ('tag' in options || 'tiles' in options) {
362
372
  var _options$tag;
363
373
  // throw when missing required snapshot or tag name
package/dist/queue.js CHANGED
@@ -1,13 +1,16 @@
1
- function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
2
- function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
3
- function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
4
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5
- function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
6
- function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
7
- function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
8
- function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
9
- function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
10
- function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
1
+ function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
2
+ function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
3
+ function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
4
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
5
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
6
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
+ function _classPrivateFieldSet(e, t, r) { var s = _classPrivateFieldGet2(t, e); return _classApplyDescriptorSet(e, s, r), r; }
8
+ function _classApplyDescriptorSet(e, t, l) { if (t.set) t.set.call(e, l);else { if (!t.writable) throw new TypeError("attempted to set read only private field"); t.value = l; } }
9
+ function _classPrivateMethodGet(s, a, r) { return _assertClassBrand(a, s), r; }
10
+ function _classPrivateFieldGet(e, t) { var r = _classPrivateFieldGet2(t, e); return _classApplyDescriptorGet(e, r); }
11
+ function _classPrivateFieldGet2(s, a) { return s.get(_assertClassBrand(s, a)); }
12
+ function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
13
+ function _classApplyDescriptorGet(e, t) { return t.get ? t.get.call(e) : t.value; }
11
14
  import { yieldFor, generatePromise, AbortController } from './utils.js';
12
15
  import logger from '@percy/logger';
13
16
 
@@ -160,24 +163,26 @@ export class Queue {
160
163
 
161
164
  // Returns an item task matching the provided subject.
162
165
 
166
+ // keep track of start and end tasks
167
+
163
168
  // Initialize a starting task or return an existing one.
164
169
  start() {
165
- var _classPrivateFieldGet2;
170
+ var _classPrivateFieldGet3;
166
171
  _classPrivateFieldGet(this, _start) ?? _classPrivateFieldSet(this, _start, deferred({
167
172
  readyState: 1
168
173
  }));
169
- (_classPrivateFieldGet2 = _classPrivateFieldGet(this, _start)).handler ?? (_classPrivateFieldGet2.handler = _classPrivateFieldGet(this, _end) // wait for any ending task to complete first
174
+ (_classPrivateFieldGet3 = _classPrivateFieldGet(this, _start)).handler ?? (_classPrivateFieldGet3.handler = _classPrivateFieldGet(this, _end) // wait for any ending task to complete first
170
175
  ? () => _classPrivateFieldGet(this, _end).promise.then(_classPrivateFieldGet(this, _handlers).start) : _classPrivateFieldGet(this, _handlers).start);
171
176
  return _classPrivateMethodGet(this, _process, _process2).call(this, _classPrivateFieldGet(this, _start)).deferred;
172
177
  }
173
178
 
174
179
  // intialize an ending task or return an existing one
175
180
  end() {
176
- var _classPrivateFieldGet3;
181
+ var _classPrivateFieldGet4;
177
182
  _classPrivateFieldGet(this, _end) ?? _classPrivateFieldSet(this, _end, deferred({
178
183
  readyState: 0
179
184
  }));
180
- (_classPrivateFieldGet3 = _classPrivateFieldGet(this, _end)).handler ?? (_classPrivateFieldGet3.handler = _classPrivateFieldGet(this, _start) // wait for any starting task to complete first
185
+ (_classPrivateFieldGet4 = _classPrivateFieldGet(this, _end)).handler ?? (_classPrivateFieldGet4.handler = _classPrivateFieldGet(this, _start) // wait for any starting task to complete first
181
186
  ? () => _classPrivateFieldGet(this, _start).promise.then(_classPrivateFieldGet(this, _handlers).end) : _classPrivateFieldGet(this, _handlers).end);
182
187
  return _classPrivateMethodGet(this, _process, _process2).call(this, _classPrivateFieldGet(this, _end)).deferred;
183
188
  }
@@ -202,9 +207,9 @@ export class Queue {
202
207
 
203
208
  // close a running queue, optionally aborting it
204
209
  close(abort) {
205
- var _classPrivateFieldGet4;
210
+ var _classPrivateFieldGet5;
206
211
  // when starting, state is updated afterwards
207
- if ((_classPrivateFieldGet4 = _classPrivateFieldGet(this, _start)) !== null && _classPrivateFieldGet4 !== void 0 && _classPrivateFieldGet4.pending) _classPrivateFieldGet(this, _start).readyState = 3;
212
+ if ((_classPrivateFieldGet5 = _classPrivateFieldGet(this, _start)) !== null && _classPrivateFieldGet5 !== void 0 && _classPrivateFieldGet5.pending) _classPrivateFieldGet(this, _start).readyState = 3;
208
213
  if (this.readyState < 3) this.readyState = 3;
209
214
  if (abort) this.clear();
210
215
  return this;
@@ -223,10 +228,10 @@ export class Queue {
223
228
 
224
229
  // process a single item task when started
225
230
  process(item) {
226
- var _classPrivateFieldGet5;
231
+ var _classPrivateFieldGet6;
227
232
  let task = _classPrivateMethodGet(this, _find, _find2).call(this, item);
228
233
  if (task && !_classPrivateFieldGet(this, _start)) this.start();
229
- (_classPrivateFieldGet5 = _classPrivateFieldGet(this, _start)) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.promise.then(() => _classPrivateMethodGet(this, _process, _process2).call(this, task));
234
+ (_classPrivateFieldGet6 = _classPrivateFieldGet(this, _start)) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.promise.then(() => _classPrivateMethodGet(this, _process, _process2).call(this, task));
230
235
  return task === null || task === void 0 ? void 0 : task.deferred;
231
236
  }
232
237
 
@@ -236,9 +241,9 @@ export class Queue {
236
241
  // callback every 10ms during checks with the current number of pending tasks
237
242
  idle(callback) {
238
243
  return yieldFor(() => {
239
- var _classPrivateFieldGet6;
244
+ var _classPrivateFieldGet7;
240
245
  callback === null || callback === void 0 ? void 0 : callback(_classPrivateFieldGet(this, _pending).size);
241
- let starting = ((_classPrivateFieldGet6 = _classPrivateFieldGet(this, _start)) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.pending) === true;
246
+ let starting = ((_classPrivateFieldGet7 = _classPrivateFieldGet(this, _start)) === null || _classPrivateFieldGet7 === void 0 ? void 0 : _classPrivateFieldGet7.pending) === true;
242
247
  return !starting && !_classPrivateFieldGet(this, _pending).size;
243
248
  }, {
244
249
  idle: 10
@@ -324,8 +329,8 @@ function _process2(task) {
324
329
  async function* _until2(task, callback) {
325
330
  try {
326
331
  yield* yieldFor(() => {
327
- var _classPrivateFieldGet7;
328
- if ((_classPrivateFieldGet7 = _classPrivateFieldGet(this, _start)) !== null && _classPrivateFieldGet7 !== void 0 && _classPrivateFieldGet7.pending) return false;
332
+ var _classPrivateFieldGet8;
333
+ if ((_classPrivateFieldGet8 = _classPrivateFieldGet(this, _start)) !== null && _classPrivateFieldGet8 !== void 0 && _classPrivateFieldGet8.pending) return false;
329
334
  let queued,
330
335
  pending = _classPrivateFieldGet(this, _pending).size;
331
336
  // calculate the position within queued when not pending
package/dist/server.js CHANGED
@@ -1,12 +1,13 @@
1
- function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
2
- function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
3
- function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
4
- function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
5
- function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
6
- function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
7
- function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
8
- function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
9
- function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
1
+ function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
2
+ function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
3
+ function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
4
+ function _classPrivateFieldGet2(e, t) { var r = _classPrivateFieldGet(t, e); return _classApplyDescriptorGet(e, r); }
5
+ function _classApplyDescriptorGet(e, t) { return t.get ? t.get.call(e) : t.value; }
6
+ function _classPrivateMethodGet(s, a, r) { return _assertClassBrand(a, s), r; }
7
+ function _classPrivateFieldSet(e, t, r) { var s = _classPrivateFieldGet(t, e); return _classApplyDescriptorSet(e, s, r), r; }
8
+ function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
9
+ function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
10
+ function _classApplyDescriptorSet(e, t, l) { if (t.set) t.set.call(e, l);else { if (!t.writable) throw new TypeError("attempted to set read only private field"); t.value = l; } }
10
11
  import fs from 'fs';
11
12
  import path from 'path';
12
13
  import http from 'http';
@@ -130,7 +131,7 @@ export class Server extends http.Server {
130
131
  res.setHeader('Access-Control-Allow-Origin', '*');
131
132
  if (req.method === 'OPTIONS') {
132
133
  let allowHeaders = req.headers['access-control-request-headers'] || '*';
133
- let allowMethods = [...new Set(_classPrivateFieldGet(this, _routes).flatMap(route => (!route.match || route.match(req.url.pathname)) && route.methods || []))].join(', ');
134
+ let allowMethods = [...new Set(_classPrivateFieldGet2(this, _routes).flatMap(route => (!route.match || route.match(req.url.pathname)) && route.methods || []))].join(', ');
134
135
  res.setHeader('Access-Control-Allow-Headers', allowHeaders);
135
136
  res.setHeader('Access-Control-Allow-Methods', allowMethods);
136
137
  res.writeHead(204).end();
@@ -152,8 +153,8 @@ export class Server extends http.Server {
152
153
  });
153
154
  // track open connections to terminate when the server closes
154
155
  this.on('connection', socket => {
155
- let handleClose = () => _classPrivateFieldGet(this, _sockets).delete(socket);
156
- _classPrivateFieldGet(this, _sockets).add(socket.on('close', handleClose));
156
+ let handleClose = () => _classPrivateFieldGet2(this, _sockets).delete(socket);
157
+ _classPrivateFieldGet2(this, _sockets).add(socket.on('close', handleClose));
157
158
  });
158
159
  }
159
160
 
@@ -165,7 +166,7 @@ export class Server extends http.Server {
165
166
  // return the listening port or any default port
166
167
  get port() {
167
168
  var _super$address;
168
- return ((_super$address = super.address()) === null || _super$address === void 0 ? void 0 : _super$address.port) ?? _classPrivateFieldGet(this, _defaultPort);
169
+ return ((_super$address = super.address()) === null || _super$address === void 0 ? void 0 : _super$address.port) ?? _classPrivateFieldGet2(this, _defaultPort);
169
170
  }
170
171
 
171
172
  // return a string representation of the server address
@@ -180,7 +181,7 @@ export class Server extends http.Server {
180
181
  }
181
182
 
182
183
  // return a promise that resolves when the server is listening
183
- listen(port = _classPrivateFieldGet(this, _defaultPort)) {
184
+ listen(port = _classPrivateFieldGet2(this, _defaultPort)) {
184
185
  return new Promise((resolve, reject) => {
185
186
  let handle = err => off() && err ? reject(err) : resolve(this);
186
187
  let off = () => this.off('error', handle).off('listening', handle);
@@ -191,13 +192,15 @@ export class Server extends http.Server {
191
192
  // return a promise that resolves when the server closes
192
193
  close() {
193
194
  return new Promise(resolve => {
194
- _classPrivateFieldGet(this, _sockets).forEach(socket => socket.destroy());
195
+ _classPrivateFieldGet2(this, _sockets).forEach(socket => socket.destroy());
195
196
  super.close(resolve);
196
197
  });
197
198
  }
198
199
 
199
200
  // initial routes include cors and 404 handling
200
201
 
202
+ // adds a route in the correct priority order
203
+
201
204
  // set request routing and handling for pathnames and methods
202
205
  route(method, pathname, handle) {
203
206
  if (arguments.length === 1) [handle, method] = [method];
@@ -255,8 +258,8 @@ export class Server extends http.Server {
255
258
 
256
259
  // create a url rewriter from provided rewrite rules
257
260
  function _route2(route) {
258
- let i = _classPrivateFieldGet(this, _routes).findIndex(r => r.priority >= route.priority);
259
- _classPrivateFieldGet(this, _routes).splice(i, 0, route);
261
+ let i = _classPrivateFieldGet2(this, _routes).findIndex(r => r.priority >= route.priority);
262
+ _classPrivateFieldGet2(this, _routes).splice(i, 0, route);
260
263
  return this;
261
264
  }
262
265
  async function _handleRequest2(req, res) {
@@ -275,7 +278,7 @@ async function _handleRequest2(req, res) {
275
278
  result && (result = !match || match(req.url.pathname));
276
279
  if (result) req.params = result.params;
277
280
  return result ? handle(req, res, next) : next();
278
- }(_classPrivateFieldGet(this, _routes));
281
+ }(_classPrivateFieldGet2(this, _routes));
279
282
  } catch (error) {
280
283
  var _req$headers$accept, _req$headers$content;
281
284
  let {
package/dist/snapshot.js CHANGED
@@ -114,7 +114,8 @@ function getSnapshotOptions(options, {
114
114
  ...meta,
115
115
  snapshot: {
116
116
  name: options.name,
117
- testCase: options.testCase
117
+ testCase: options.testCase,
118
+ labels: options.labels
118
119
  }
119
120
  }
120
121
  }, config.snapshot, {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@percy/core",
3
- "version": "1.28.8-beta.4",
3
+ "version": "1.28.8",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -9,7 +9,7 @@
9
9
  },
10
10
  "publishConfig": {
11
11
  "access": "public",
12
- "tag": "beta"
12
+ "tag": "latest"
13
13
  },
14
14
  "engines": {
15
15
  "node": ">=14"
@@ -43,22 +43,22 @@
43
43
  "test:types": "tsd"
44
44
  },
45
45
  "dependencies": {
46
- "@percy/client": "1.28.8-beta.4",
47
- "@percy/config": "1.28.8-beta.4",
48
- "@percy/dom": "1.28.8-beta.4",
49
- "@percy/logger": "1.28.8-beta.4",
50
- "@percy/webdriver-utils": "1.28.8-beta.4",
46
+ "@percy/client": "1.28.8",
47
+ "@percy/config": "1.28.8",
48
+ "@percy/dom": "1.28.8",
49
+ "@percy/logger": "1.28.8",
50
+ "@percy/webdriver-utils": "1.28.8",
51
51
  "content-disposition": "^0.5.4",
52
52
  "cross-spawn": "^7.0.3",
53
53
  "extract-zip": "^2.0.1",
54
54
  "fast-glob": "^3.2.11",
55
- "micromatch": "^4.0.4",
55
+ "micromatch": "^4.0.6",
56
56
  "mime-types": "^2.1.34",
57
57
  "pako": "^2.1.0",
58
58
  "path-to-regexp": "^6.2.0",
59
59
  "rimraf": "^3.0.2",
60
- "ws": "^8.0.0",
60
+ "ws": "^8.17.1",
61
61
  "yaml": "^2.4.1"
62
62
  },
63
- "gitHead": "0ea30a56b97b5a5dab6ddc1282f71f1ecf07df2d"
63
+ "gitHead": "1b93761a01b608afadf8d4efccacc11f925396bd"
64
64
  }