@percy/sdk-utils 1.10.3 → 1.11.0

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/bundle.js CHANGED
@@ -24,43 +24,34 @@
24
24
  return logger.log(namespace, lvl, ...a);
25
25
  }
26
26
  }), {});
27
- } // Set and/or return the local loglevel
28
-
29
- const loglevel = logger.loglevel = lvl => {
30
- return loglevel.lvl = lvl || loglevel.lvl || process.env.PERCY_LOGLEVEL || 'info';
31
- }; // Track and send/write logs for the specified namespace and log level
32
-
33
-
34
- const log = logger.log = (ns, lvl, msg, meta) => {
35
- let err = typeof msg !== 'string' && (lvl === 'error' || lvl === 'debug'); // keep log history of full message
36
-
37
- let message = err ? msg.stack : msg.toString();
38
- let [debug, level, timestamp, error] = [ns, lvl, Date.now(), !!err];
39
- (log.history || (log.history = [])).push({
40
- debug,
41
- level,
42
- message,
43
- meta,
44
- timestamp,
45
- error
46
- }); // check if the specific level is within the local loglevel range
47
-
48
- if (LOG_LEVELS[lvl] != null && LOG_LEVELS[lvl] >= LOG_LEVELS[loglevel()]) {
49
- let debug = loglevel() === 'debug';
50
- let label = debug ? `percy:${ns}` : 'percy'; // colorize the label when possible for consistency with the CLI logger
51
-
52
- if (!process.env.__PERCY_BROWSERIFIED__) label = `\u001b[95m${label}\u001b[39m`;
53
- msg = `[${label}] ${err && debug && msg.stack || msg}`;
54
-
55
- if (process.env.__PERCY_BROWSERIFIED__) {
56
- // use console[warn|error|log] in browsers
57
- console[['warn', 'error'].includes(lvl) ? lvl : 'log'](msg);
58
- } else {
59
- // use process[stdout|stderr].write in node
60
- process[lvl === 'info' ? 'stdout' : 'stderr'].write(msg + '\n');
27
+ }
28
+ Object.assign(logger, {
29
+ // Set and/or return the local loglevel
30
+ loglevel: function () {
31
+ let lvl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : logger.loglevel.lvl;
32
+ return logger.loglevel.lvl = lvl || process.env.PERCY_LOGLEVEL || 'info';
33
+ },
34
+ // Track and send/write logs for the specified namespace and log level
35
+ log: (ns, lvl, msg, meta) => {
36
+ let err = typeof msg !== 'string' && (lvl === 'error' || lvl === 'debug'); // check if the specific level is within the local loglevel range
37
+
38
+ if (LOG_LEVELS[lvl] != null && LOG_LEVELS[lvl] >= LOG_LEVELS[logger.loglevel()]) {
39
+ let debug = logger.loglevel() === 'debug';
40
+ let label = debug ? `percy:${ns}` : 'percy'; // colorize the label when possible for consistency with the CLI logger
41
+
42
+ if (!process.env.__PERCY_BROWSERIFIED__) label = `\u001b[95m${label}\u001b[39m`;
43
+ msg = `[${label}] ${err && debug && msg.stack || msg}`;
44
+
45
+ if (process.env.__PERCY_BROWSERIFIED__) {
46
+ // use console[warn|error|log] in browsers
47
+ console[['warn', 'error'].includes(lvl) ? lvl : 'log'](msg);
48
+ } else {
49
+ // use process[stdout|stderr].write in node
50
+ process[lvl === 'info' ? 'stdout' : 'stderr'].write(msg + '\n');
51
+ }
61
52
  }
62
53
  }
63
- };
54
+ });
64
55
 
65
56
  // helper to create a version object from a string
66
57
  function toVersion(str) {
@@ -232,7 +223,7 @@
232
223
  return info.domScript;
233
224
  }
234
225
 
235
- // error message, signal that Percy has been disabled.
226
+ // indicate that Percy has been disabled.
236
227
 
237
228
  async function postSnapshot(options, params) {
238
229
  let query = params ? `?${new URLSearchParams(params)}` : '';
@@ -247,6 +238,33 @@
247
238
  });
248
239
  }
249
240
 
241
+ // indicate that Percy has been disabled.
242
+
243
+ async function postComparison(options, params) {
244
+ let query = params ? `?${new URLSearchParams(params)}` : '';
245
+ await request.post(`/percy/comparison${query}`, options).catch(err => {
246
+ var _err$response, _err$response$body, _err$response$body$bu;
247
+
248
+ if ((_err$response = err.response) !== null && _err$response !== void 0 && (_err$response$body = _err$response.body) !== null && _err$response$body !== void 0 && (_err$response$body$bu = _err$response$body.build) !== null && _err$response$body$bu !== void 0 && _err$response$body$bu.error) {
249
+ info.enabled = false;
250
+ } else {
251
+ throw err;
252
+ }
253
+ });
254
+ }
255
+
256
+ // will be flushed. Does nothing when Percy is not enabled.
257
+
258
+ async function flushSnapshots(options) {
259
+ if (info.enabled) {
260
+ // accept one or more snapshot names
261
+ options && (options = [].concat(options).map(o => typeof o === 'string' ? {
262
+ name: o
263
+ } : o));
264
+ await request.post('/percy/flush', options);
265
+ }
266
+ }
267
+
250
268
  var index = /*#__PURE__*/Object.freeze({
251
269
  __proto__: null,
252
270
  logger: logger,
@@ -256,14 +274,18 @@
256
274
  waitForPercyIdle: waitForPercyIdle,
257
275
  fetchPercyDOM: fetchPercyDOM,
258
276
  postSnapshot: postSnapshot,
277
+ postComparison: postComparison,
278
+ flushSnapshots: flushSnapshots,
259
279
  'default': index
260
280
  });
261
281
 
262
282
  exports["default"] = index;
263
283
  exports.fetchPercyDOM = fetchPercyDOM;
284
+ exports.flushSnapshots = flushSnapshots;
264
285
  exports.isPercyEnabled = isPercyEnabled;
265
286
  exports.logger = logger;
266
287
  exports.percy = info;
288
+ exports.postComparison = postComparison;
267
289
  exports.postSnapshot = postSnapshot;
268
290
  exports.request = request;
269
291
  exports.waitForPercyIdle = waitForPercyIdle;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ exports.flushSnapshots = flushSnapshots;
8
+
9
+ var _percyInfo = _interopRequireDefault(require("./percy-info.js"));
10
+
11
+ var _request = _interopRequireDefault(require("./request.js"));
12
+
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+
15
+ // Posts to the local Percy server one or more snapshots to flush. Given no arguments, all snapshots
16
+ // will be flushed. Does nothing when Percy is not enabled.
17
+ async function flushSnapshots(options) {
18
+ if (_percyInfo.default.enabled) {
19
+ // accept one or more snapshot names
20
+ options && (options = [].concat(options).map(o => typeof o === 'string' ? {
21
+ name: o
22
+ } : o));
23
+ await _request.default.post('/percy/flush', options);
24
+ }
25
+ }
26
+
27
+ var _default = flushSnapshots;
28
+ exports.default = _default;
package/dist/index.js CHANGED
@@ -10,6 +10,12 @@ Object.defineProperty(exports, "fetchPercyDOM", {
10
10
  return _percyDom.default;
11
11
  }
12
12
  });
13
+ Object.defineProperty(exports, "flushSnapshots", {
14
+ enumerable: true,
15
+ get: function () {
16
+ return _flushSnapshots.default;
17
+ }
18
+ });
13
19
  Object.defineProperty(exports, "isPercyEnabled", {
14
20
  enumerable: true,
15
21
  get: function () {
@@ -28,6 +34,12 @@ Object.defineProperty(exports, "percy", {
28
34
  return _percyInfo.default;
29
35
  }
30
36
  });
37
+ Object.defineProperty(exports, "postComparison", {
38
+ enumerable: true,
39
+ get: function () {
40
+ return _postComparison.default;
41
+ }
42
+ });
31
43
  Object.defineProperty(exports, "postSnapshot", {
32
44
  enumerable: true,
33
45
  get: function () {
@@ -61,6 +73,10 @@ var _percyDom = _interopRequireDefault(require("./percy-dom.js"));
61
73
 
62
74
  var _postSnapshot = _interopRequireDefault(require("./post-snapshot.js"));
63
75
 
76
+ var _postComparison = _interopRequireDefault(require("./post-comparison.js"));
77
+
78
+ var _flushSnapshots = _interopRequireDefault(require("./flush-snapshots.js"));
79
+
64
80
  var _default = _interopRequireWildcard(require("./index.js"));
65
81
 
66
82
  exports.default = _default;
package/dist/logger.js CHANGED
@@ -17,44 +17,33 @@ function logger(namespace) {
17
17
  return Object.keys(LOG_LEVELS).reduce((ns, lvl) => Object.assign(ns, {
18
18
  [lvl]: (...a) => logger.log(namespace, lvl, ...a)
19
19
  }), {});
20
- } // Set and/or return the local loglevel
21
-
22
-
23
- const loglevel = logger.loglevel = lvl => {
24
- return loglevel.lvl = lvl || loglevel.lvl || process.env.PERCY_LOGLEVEL || 'info';
25
- }; // Track and send/write logs for the specified namespace and log level
26
-
27
-
28
- const log = logger.log = (ns, lvl, msg, meta) => {
29
- let err = typeof msg !== 'string' && (lvl === 'error' || lvl === 'debug'); // keep log history of full message
30
-
31
- let message = err ? msg.stack : msg.toString();
32
- let [debug, level, timestamp, error] = [ns, lvl, Date.now(), !!err];
33
- (log.history || (log.history = [])).push({
34
- debug,
35
- level,
36
- message,
37
- meta,
38
- timestamp,
39
- error
40
- }); // check if the specific level is within the local loglevel range
41
-
42
- if (LOG_LEVELS[lvl] != null && LOG_LEVELS[lvl] >= LOG_LEVELS[loglevel()]) {
43
- let debug = loglevel() === 'debug';
44
- let label = debug ? `percy:${ns}` : 'percy'; // colorize the label when possible for consistency with the CLI logger
45
-
46
- if (!process.env.__PERCY_BROWSERIFIED__) label = `\u001b[95m${label}\u001b[39m`;
47
- msg = `[${label}] ${err && debug && msg.stack || msg}`;
48
-
49
- if (process.env.__PERCY_BROWSERIFIED__) {
50
- // use console[warn|error|log] in browsers
51
- console[['warn', 'error'].includes(lvl) ? lvl : 'log'](msg);
52
- } else {
53
- // use process[stdout|stderr].write in node
54
- process[lvl === 'info' ? 'stdout' : 'stderr'].write(msg + '\n');
20
+ }
21
+
22
+ Object.assign(logger, {
23
+ // Set and/or return the local loglevel
24
+ loglevel: (lvl = logger.loglevel.lvl) => {
25
+ return logger.loglevel.lvl = lvl || process.env.PERCY_LOGLEVEL || 'info';
26
+ },
27
+ // Track and send/write logs for the specified namespace and log level
28
+ log: (ns, lvl, msg, meta) => {
29
+ let err = typeof msg !== 'string' && (lvl === 'error' || lvl === 'debug'); // check if the specific level is within the local loglevel range
30
+
31
+ if (LOG_LEVELS[lvl] != null && LOG_LEVELS[lvl] >= LOG_LEVELS[logger.loglevel()]) {
32
+ let debug = logger.loglevel() === 'debug';
33
+ let label = debug ? `percy:${ns}` : 'percy'; // colorize the label when possible for consistency with the CLI logger
34
+
35
+ if (!process.env.__PERCY_BROWSERIFIED__) label = `\u001b[95m${label}\u001b[39m`;
36
+ msg = `[${label}] ${err && debug && msg.stack || msg}`;
37
+
38
+ if (process.env.__PERCY_BROWSERIFIED__) {
39
+ // use console[warn|error|log] in browsers
40
+ console[['warn', 'error'].includes(lvl) ? lvl : 'log'](msg);
41
+ } else {
42
+ // use process[stdout|stderr].write in node
43
+ process[lvl === 'info' ? 'stdout' : 'stderr'].write(msg + '\n');
44
+ }
55
45
  }
56
46
  }
57
- };
58
-
47
+ });
59
48
  var _default = logger;
60
49
  exports.default = _default;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ exports.postComparison = postComparison;
8
+
9
+ var _percyInfo = _interopRequireDefault(require("./percy-info.js"));
10
+
11
+ var _request = _interopRequireDefault(require("./request.js"));
12
+
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+
15
+ // Post snapshot data to the CLI snapshot endpoint. If the endpoint responds with a build error,
16
+ // indicate that Percy has been disabled.
17
+ async function postComparison(options, params) {
18
+ let query = params ? `?${new URLSearchParams(params)}` : '';
19
+ await _request.default.post(`/percy/comparison${query}`, options).catch(err => {
20
+ var _err$response, _err$response$body, _err$response$body$bu;
21
+
22
+ if ((_err$response = err.response) !== null && _err$response !== void 0 && (_err$response$body = _err$response.body) !== null && _err$response$body !== void 0 && (_err$response$body$bu = _err$response$body.build) !== null && _err$response$body$bu !== void 0 && _err$response$body$bu.error) {
23
+ _percyInfo.default.enabled = false;
24
+ } else {
25
+ throw err;
26
+ }
27
+ });
28
+ }
29
+
30
+ var _default = postComparison;
31
+ exports.default = _default;
@@ -12,8 +12,8 @@ var _request = _interopRequireDefault(require("./request.js"));
12
12
 
13
13
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
14
 
15
- // Post snapshot data to the snapshot endpoint. If the snapshot endpoint responds with a closed
16
- // error message, signal that Percy has been disabled.
15
+ // Post snapshot data to the CLI snapshot endpoint. If the endpoint responds with a build error,
16
+ // indicate that Percy has been disabled.
17
17
  async function postSnapshot(options, params) {
18
18
  let query = params ? `?${new URLSearchParams(params)}` : '';
19
19
  await _request.default.post(`/percy/snapshot${query}`, options).catch(err => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@percy/sdk-utils",
3
- "version": "1.10.3",
3
+ "version": "1.11.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -50,5 +50,5 @@
50
50
  ]
51
51
  }
52
52
  },
53
- "gitHead": "a9858d20a9b9708da0464c0617b32b2ee1c97433"
53
+ "gitHead": "0a5043cd677266390889063924f342af9b347055"
54
54
  }
package/test/client.js CHANGED
@@ -16,6 +16,9 @@
16
16
  const utils = require$$0__default["default"];
17
17
  const helpers = {
18
18
  async setupTest() {
19
+ let {
20
+ logger = true
21
+ } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
19
22
  utils.percy.version = '';
20
23
  delete utils.percy.config;
21
24
  delete utils.percy.enabled;
@@ -24,6 +27,8 @@
24
27
  delete utils.logger.loglevel.lvl;
25
28
  delete process.env.PERCY_LOGLEVEL;
26
29
  delete process.env.PERCY_SERVER_ADDRESS;
30
+ utils.logger.log = helpers.logger.__log__;
31
+ if (logger) helpers.logger.mock();
27
32
  await helpers.test('reset');
28
33
  },
29
34
 
@@ -40,8 +45,32 @@
40
45
 
41
46
  get testSnapshotURL() {
42
47
  return `${utils.percy.address}/test/snapshot`;
43
- }
48
+ },
49
+
50
+ logger: {
51
+ __log__: utils.logger.log,
52
+ loglevel: utils.logger.loglevel,
53
+ stdout: [],
54
+ stderr: [],
55
+
56
+ mock() {
57
+ helpers.logger.reset();
44
58
 
59
+ utils.logger.log = (ns, lvl, msg) => {
60
+ if (lvl === 'debug' && helpers.logger.loglevel.lvl !== 'debug') return;
61
+ msg = `[percy${lvl === 'debug' ? `:${ns}` : ''}] ${msg}`;
62
+ let io = lvl === 'info' ? 'stdout' : 'stderr';
63
+ helpers.logger[io].push(msg);
64
+ };
65
+ },
66
+
67
+ reset() {
68
+ helpers.logger.stdout = [];
69
+ helpers.logger.stderr = [];
70
+ helpers.logger.loglevel('info');
71
+ }
72
+
73
+ }
45
74
  };
46
75
  var helpers_1 = helpers;
47
76
 
package/test/helpers.js CHANGED
@@ -1,7 +1,7 @@
1
1
  const utils = require('@percy/sdk-utils');
2
2
 
3
3
  const helpers = {
4
- async setupTest() {
4
+ async setupTest({ logger = true } = {}) {
5
5
  utils.percy.version = '';
6
6
  delete utils.percy.config;
7
7
  delete utils.percy.enabled;
@@ -10,6 +10,8 @@ const helpers = {
10
10
  delete utils.logger.loglevel.lvl;
11
11
  delete process.env.PERCY_LOGLEVEL;
12
12
  delete process.env.PERCY_SERVER_ADDRESS;
13
+ utils.logger.log = helpers.logger.__log__;
14
+ if (logger) helpers.logger.mock();
13
15
  await helpers.test('reset');
14
16
  },
15
17
 
@@ -26,6 +28,30 @@ const helpers = {
26
28
 
27
29
  get testSnapshotURL() {
28
30
  return `${utils.percy.address}/test/snapshot`;
31
+ },
32
+
33
+ logger: {
34
+ __log__: utils.logger.log,
35
+ loglevel: utils.logger.loglevel,
36
+ stdout: [],
37
+ stderr: [],
38
+
39
+ mock() {
40
+ helpers.logger.reset();
41
+
42
+ utils.logger.log = (ns, lvl, msg) => {
43
+ if (lvl === 'debug' && helpers.logger.loglevel.lvl !== 'debug') return;
44
+ msg = `[percy${lvl === 'debug' ? `:${ns}` : ''}] ${msg}`;
45
+ let io = (lvl === 'info') ? 'stdout' : 'stderr';
46
+ helpers.logger[io].push(msg);
47
+ };
48
+ },
49
+
50
+ reset() {
51
+ helpers.logger.stdout = [];
52
+ helpers.logger.stderr = [];
53
+ helpers.logger.loglevel('info');
54
+ }
29
55
  }
30
56
  };
31
57