@percy/sdk-utils 1.32.0-beta.8 → 1.32.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
@@ -326,6 +326,38 @@
326
326
  }
327
327
  }
328
328
 
329
+ function isPlainObject(value) {
330
+ return !!value && typeof value === 'object' && !Array.isArray(value);
331
+ }
332
+
333
+ // Recursively merge `override` onto `base`. Plain (non-array) objects are merged
334
+ // key-by-key so overriding one nested key keeps the base's sibling keys; arrays,
335
+ // scalars, null and functions from `override` replace the base value wholesale.
336
+ function deepMerge(base, override) {
337
+ const result = {
338
+ ...base
339
+ };
340
+ for (const key of Object.keys(override)) {
341
+ const baseVal = base[key];
342
+ const overrideVal = override[key];
343
+ result[key] = isPlainObject(baseVal) && isPlainObject(overrideVal) ? deepMerge(baseVal, overrideVal) : overrideVal;
344
+ }
345
+ return result;
346
+ }
347
+
348
+ // Merges .percy.yml config snapshot options with per-snapshot options.
349
+ // Per-snapshot options take priority over config options.
350
+ //
351
+ // The merge is deep: nested objects (e.g. `discovery`) are merged recursively so
352
+ // a per-snapshot override of one nested key does not drop the config's sibling
353
+ // nested keys. At the leaves, per-snapshot values win; arrays are replaced, not
354
+ // concatenated.
355
+ function mergeSnapshotOptions(options = {}) {
356
+ var _percy$config;
357
+ const configOptions = (info === null || info === void 0 || (_percy$config = info.config) === null || _percy$config === void 0 ? void 0 : _percy$config.snapshot) || {};
358
+ return deepMerge(configOptions, options);
359
+ }
360
+
329
361
  // Returns the readiness config for a snapshot.
330
362
  // Shallow-merge of global .percy.yml config with per-snapshot overrides:
331
363
  // per-snapshot keys win, unspecified keys are inherited from the global config.
@@ -481,6 +513,7 @@
481
513
  captureAutomateScreenshot: captureAutomateScreenshot,
482
514
  postBuildEvents: postBuildEvents,
483
515
  getResponsiveWidths: getResponsiveWidths,
516
+ mergeSnapshotOptions: mergeSnapshotOptions,
484
517
  DEFAULT_MAX_IFRAME_DEPTH: DEFAULT_MAX_IFRAME_DEPTH,
485
518
  HARD_MAX_IFRAME_DEPTH: HARD_MAX_IFRAME_DEPTH,
486
519
  clampIframeDepth: clampIframeDepth,
@@ -503,6 +536,7 @@
503
536
  exports.isPercyEnabled = isPercyEnabled;
504
537
  exports.isReadinessDisabled = isReadinessDisabled;
505
538
  exports.logger = logger;
539
+ exports.mergeSnapshotOptions = mergeSnapshotOptions;
506
540
  exports.percy = info;
507
541
  exports.postBuildEvents = postBuildEvents;
508
542
  exports.postComparison = postComparison;
package/dist/index.js CHANGED
@@ -54,6 +54,12 @@ Object.defineProperty(exports, "logger", {
54
54
  return _logger.default;
55
55
  }
56
56
  });
57
+ Object.defineProperty(exports, "mergeSnapshotOptions", {
58
+ enumerable: true,
59
+ get: function () {
60
+ return _mergeSnapshotOptions.default;
61
+ }
62
+ });
57
63
  Object.defineProperty(exports, "percy", {
58
64
  enumerable: true,
59
65
  get: function () {
@@ -114,6 +120,7 @@ var _postBuildEvent = _interopRequireDefault(require("./post-build-event.js"));
114
120
  var _flushSnapshots = _interopRequireDefault(require("./flush-snapshots.js"));
115
121
  var _postScreenshot = _interopRequireDefault(require("./post-screenshot.js"));
116
122
  var _getResponsiveWidths = _interopRequireDefault(require("./get-responsive-widths.js"));
123
+ var _mergeSnapshotOptions = _interopRequireDefault(require("./merge-snapshot-options.js"));
117
124
  var _serializeDom = require("./serialize-dom.js");
118
125
  var _default = _interopRequireWildcard(require("./index.js"));
119
126
  exports.default = _default;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ exports.mergeSnapshotOptions = mergeSnapshotOptions;
8
+ var _percyInfo = _interopRequireDefault(require("./percy-info.js"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ function isPlainObject(value) {
11
+ return !!value && typeof value === 'object' && !Array.isArray(value);
12
+ }
13
+
14
+ // Recursively merge `override` onto `base`. Plain (non-array) objects are merged
15
+ // key-by-key so overriding one nested key keeps the base's sibling keys; arrays,
16
+ // scalars, null and functions from `override` replace the base value wholesale.
17
+ function deepMerge(base, override) {
18
+ const result = {
19
+ ...base
20
+ };
21
+ for (const key of Object.keys(override)) {
22
+ const baseVal = base[key];
23
+ const overrideVal = override[key];
24
+ result[key] = isPlainObject(baseVal) && isPlainObject(overrideVal) ? deepMerge(baseVal, overrideVal) : overrideVal;
25
+ }
26
+ return result;
27
+ }
28
+
29
+ // Merges .percy.yml config snapshot options with per-snapshot options.
30
+ // Per-snapshot options take priority over config options.
31
+ //
32
+ // The merge is deep: nested objects (e.g. `discovery`) are merged recursively so
33
+ // a per-snapshot override of one nested key does not drop the config's sibling
34
+ // nested keys. At the leaves, per-snapshot values win; arrays are replaced, not
35
+ // concatenated.
36
+ function mergeSnapshotOptions(options = {}) {
37
+ var _percy$config;
38
+ const configOptions = (_percyInfo.default === null || _percyInfo.default === void 0 || (_percy$config = _percyInfo.default.config) === null || _percy$config === void 0 ? void 0 : _percy$config.snapshot) || {};
39
+ return deepMerge(configOptions, options);
40
+ }
41
+ var _default = exports.default = mergeSnapshotOptions;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@percy/sdk-utils",
3
- "version": "1.32.0-beta.8",
3
+ "version": "1.32.0",
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"
@@ -54,5 +54,5 @@
54
54
  "dependencies": {
55
55
  "pac-proxy-agent": "^7.0.2"
56
56
  },
57
- "gitHead": "8e91413b6ed95aeefad697f058709e2a0fe56f0e"
57
+ "gitHead": "87f5058139cf3f9a44cd6649d797e6f95571b749"
58
58
  }