@percy/dom 1.19.1-alpha.0 → 1.19.2-alpha.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/README.md CHANGED
@@ -37,6 +37,7 @@ const domSnapshot = await page.evaluate(() => PercyDOM.serialize(options))
37
37
 
38
38
  - `enableJavaScript` — When true, does not serialize some DOM elements
39
39
  - `domTransformation` — Function to transform the DOM after serialization
40
+ - `disableShadowDOM` — disable shadow DOM capturing, this option can be passed to `percySnapshot` its part of per-snapshot config.
40
41
 
41
42
  ## Serialized Content
42
43
 
package/dist/bundle.js CHANGED
@@ -69,7 +69,8 @@
69
69
  clone,
70
70
  warnings,
71
71
  resources,
72
- enableJavaScript
72
+ enableJavaScript,
73
+ disableShadowDOM
73
74
  } = _ref;
74
75
  for (let frame of dom.querySelectorAll('iframe')) {
75
76
  var _clone$head;
@@ -94,7 +95,8 @@
94
95
  let serialized = serializeDOM({
95
96
  domTransformation: setBaseURI,
96
97
  dom: frame.contentDocument,
97
- enableJavaScript
98
+ enableJavaScript,
99
+ disableShadowDOM
98
100
  });
99
101
 
100
102
  // append serialized warnings and resources
@@ -129,6 +131,65 @@
129
131
  }
130
132
  }
131
133
 
134
+ // Creates a resource object from an element's unique ID and data URL
135
+ function resourceFromDataURL(uid, dataURL) {
136
+ // split dataURL into desired parts
137
+ let [data, content] = dataURL.split(',');
138
+ let [, mimetype] = data.split(':');
139
+ [mimetype] = mimetype.split(';');
140
+
141
+ // build a URL for the serialized asset
142
+ let [, ext] = mimetype.split('/');
143
+ let path = `/__serialized__/${uid}.${ext}`;
144
+ let url = new URL(path, document.URL).toString();
145
+
146
+ // return the url, base64 content, and mimetype
147
+ return {
148
+ url,
149
+ content,
150
+ mimetype
151
+ };
152
+ }
153
+ function resourceFromText(uid, mimetype, data) {
154
+ // build a URL for the serialized asset
155
+ let [, ext] = mimetype.split('/');
156
+ let path = `/__serialized__/${uid}.${ext}`;
157
+ let url = new URL(path, document.URL).toString();
158
+ // converts text to base64
159
+ let content = window.btoa(data);
160
+
161
+ // return the url, base64 content, and mimetype
162
+ return {
163
+ url,
164
+ content,
165
+ mimetype
166
+ };
167
+ }
168
+
169
+ // Returns a mostly random uid.
170
+ function uid() {
171
+ return `_${Math.random().toString(36).substr(2, 9)}`;
172
+ }
173
+ function markElement(domElement, disableShadowDOM) {
174
+ var _domElement$tagName;
175
+ // Mark elements that are to be serialized later with a data attribute.
176
+ if (['input', 'textarea', 'select', 'iframe', 'canvas', 'video', 'style'].includes((_domElement$tagName = domElement.tagName) === null || _domElement$tagName === void 0 ? void 0 : _domElement$tagName.toLowerCase())) {
177
+ if (!domElement.getAttribute('data-percy-element-id')) {
178
+ domElement.setAttribute('data-percy-element-id', uid());
179
+ }
180
+ }
181
+
182
+ // add special marker for shadow host
183
+ if (!disableShadowDOM && domElement.shadowRoot) {
184
+ if (!domElement.getAttribute('data-percy-shadow-host')) {
185
+ domElement.setAttribute('data-percy-shadow-host', '');
186
+ }
187
+ if (!domElement.getAttribute('data-percy-element-id')) {
188
+ domElement.setAttribute('data-percy-element-id', uid());
189
+ }
190
+ }
191
+ }
192
+
132
193
  // Returns true if a stylesheet is a CSSOM-based stylesheet.
133
194
  function isCSSOM(styleSheet) {
134
195
  // no href, has a rulesheet, and has an owner node
@@ -151,8 +212,10 @@
151
212
  let {
152
213
  dom,
153
214
  clone,
154
- warnings
215
+ warnings,
216
+ resources
155
217
  } = _ref;
218
+ let adoptedStylesMap = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
156
219
  for (let styleSheet of dom.styleSheets) {
157
220
  if (isCSSOM(styleSheet)) {
158
221
  let styleId = styleSheet.ownerNode.getAttribute('data-percy-element-id');
@@ -173,6 +236,29 @@
173
236
  }
174
237
  }
175
238
 
239
+ // clone stylesheets in shadowRoot
240
+ // https://github.com/WICG/construct-stylesheets/issues/93
241
+ if (!adoptedStylesMap) {
242
+ adoptedStylesMap = new Map();
243
+ }
244
+ for (let sheet of dom.adoptedStyleSheets) {
245
+ const styleLink = document.createElement('link');
246
+ styleLink.setAttribute('rel', 'stylesheet');
247
+ if (!adoptedStylesMap.has(sheet)) {
248
+ const styles = Array.from(sheet.cssRules).map(cssRule => cssRule.cssText).join('\n');
249
+ let resource = resourceFromText(uid(), 'text/css', styles);
250
+ resources.add(resource);
251
+ adoptedStylesMap.set(sheet, resource.url);
252
+ }
253
+ styleLink.setAttribute('data-percy-serialized-attribute-href', adoptedStylesMap.get(sheet));
254
+ if (clone.constructor.name === 'HTMLDocument') {
255
+ // handle document and iframe
256
+ clone.body.prepend(styleLink);
257
+ } else if (clone.constructor.name === 'ShadowRoot') {
258
+ clone.prepend(styleLink);
259
+ }
260
+ }
261
+
176
262
  // find stylesheets inside shadow host and recursively serialize them.
177
263
  for (let shadowHost of dom.querySelectorAll('[data-percy-shadow-host]')) {
178
264
  let percyElementId = shadowHost.getAttribute('data-percy-element-id');
@@ -180,32 +266,13 @@
180
266
  if (shadowHost.shadowRoot && cloneShadowHost.shadowRoot) {
181
267
  serializeCSSOM({
182
268
  dom: shadowHost.shadowRoot,
183
- clone: cloneShadowHost.shadowRoot
184
- });
269
+ clone: cloneShadowHost.shadowRoot,
270
+ resources
271
+ }, adoptedStylesMap);
185
272
  }
186
273
  }
187
274
  }
188
275
 
189
- // Creates a resource object from an element's unique ID and data URL
190
- function resourceFromDataURL(uid, dataURL) {
191
- // split dataURL into desired parts
192
- let [data, content] = dataURL.split(',');
193
- let [, mimetype] = data.split(':');
194
- [mimetype] = mimetype.split(';');
195
-
196
- // build a URL for the serialized asset
197
- let [, ext] = mimetype.split('/');
198
- let path = `/__serialized__/${uid}.${ext}`;
199
- let url = new URL(path, document.URL).toString();
200
-
201
- // return the url, base64 content, and mimetype
202
- return {
203
- url,
204
- content,
205
- mimetype
206
- };
207
- }
208
-
209
276
  // Serialize in-memory canvas elements into images.
210
277
  function serializeCanvas(_ref) {
211
278
  let {
@@ -228,7 +295,6 @@
228
295
  resources.add(resource);
229
296
 
230
297
  // create an image element in the cloned dom
231
- // TODO: this works, verify if this is fine?
232
298
  let img = document.createElement('img');
233
299
  // use a data attribute to avoid making a real request
234
300
  img.setAttribute('data-percy-serialized-attribute-src', resource.url);
@@ -322,30 +388,6 @@
322
388
  }
323
389
  }
324
390
 
325
- // Returns a mostly random uid.
326
- function uid() {
327
- return `_${Math.random().toString(36).substr(2, 9)}`;
328
- }
329
- function markElement(domElement) {
330
- var _domElement$tagName;
331
- // Mark elements that are to be serialized later with a data attribute.
332
- if (['input', 'textarea', 'select', 'iframe', 'canvas', 'video', 'style'].includes((_domElement$tagName = domElement.tagName) === null || _domElement$tagName === void 0 ? void 0 : _domElement$tagName.toLowerCase())) {
333
- if (!domElement.getAttribute('data-percy-element-id')) {
334
- domElement.setAttribute('data-percy-element-id', uid());
335
- }
336
- }
337
-
338
- // add special marker for shadow host
339
- if (domElement.shadowRoot) {
340
- if (!domElement.getAttribute('data-percy-shadow-host')) {
341
- domElement.setAttribute('data-percy-shadow-host', '');
342
- }
343
- if (!domElement.getAttribute('data-percy-element-id')) {
344
- domElement.setAttribute('data-percy-element-id', uid());
345
- }
346
- }
347
- }
348
-
349
391
  /**
350
392
  * Custom deep clone function that replaces Percy's current clone behavior.
351
393
  * This enables us to capture shadow DOM in snapshots. It takes advantage of `attachShadow`'s mode option set to open
@@ -353,7 +395,7 @@
353
395
  */
354
396
 
355
397
  // returns document fragment
356
- const deepClone = host => {
398
+ const deepClone = (host, disableShadowDOM) => {
357
399
  // clones shadow DOM and light DOM for a given node
358
400
  let cloneNode = (node, parent) => {
359
401
  let walkTree = (nextn, nextp) => {
@@ -364,12 +406,12 @@
364
406
  };
365
407
 
366
408
  // mark the node before cloning
367
- markElement(node);
409
+ markElement(node, disableShadowDOM);
368
410
  let clone = node.cloneNode();
369
411
  parent.appendChild(clone);
370
412
 
371
413
  // clone shadow DOM
372
- if (node.shadowRoot) {
414
+ if (node.shadowRoot && !disableShadowDOM) {
373
415
  // create shadowRoot
374
416
  if (clone.shadowRoot) {
375
417
  // it may be set up in a custom element's constructor
@@ -379,15 +421,6 @@
379
421
  mode: 'open'
380
422
  });
381
423
  }
382
-
383
- // clone stylesheets in shadowRoot
384
- for (let sheet of node.shadowRoot.adoptedStyleSheets) {
385
- let cssText = Array.from(sheet.rules).map(rule => rule.cssText).join('\n');
386
- let style = document.createElement('style');
387
- style.appendChild(document.createTextNode(cssText));
388
- clone.shadowRoot.prepend(style);
389
- }
390
-
391
424
  // clone dom elements
392
425
  walkTree(node.shadowRoot.firstChild, clone.shadowRoot);
393
426
  }
@@ -403,12 +436,13 @@
403
436
  /**
404
437
  * Deep clone a document while also preserving shadow roots and converting adoptedStylesheets to <style> tags.
405
438
  */
406
- const cloneNodeAndShadow = doc => {
407
- let mockDocumentFragment = deepClone(doc.documentElement);
439
+ const cloneNodeAndShadow = ctx => {
440
+ let cloneDocumentElement = deepClone(ctx.dom.documentElement, ctx.disableShadowDOM);
441
+ // TODO: we're not properly appending documentElement (html node) in the clone document, this can cause side effects in original document.
408
442
  // convert document fragment to document object
409
- let cloneDocument = doc.cloneNode();
443
+ let cloneDocument = ctx.dom.cloneNode();
410
444
  // dissolve document fragment in clone document
411
- cloneDocument.appendChild(mockDocumentFragment);
445
+ cloneDocument.appendChild(cloneDocumentElement);
412
446
  return cloneDocument;
413
447
  };
414
448
 
@@ -453,7 +487,9 @@
453
487
  document.addEventListener("DOMContentLoaded", () => reversePolyFill());
454
488
  }
455
489
  `.replace(/(\n|\s{2}|\t)/g, '');
456
- clone.body.appendChild(scriptEl);
490
+
491
+ // run polyfill as first thing post dom content is loaded
492
+ clone.head.prepend(scriptEl);
457
493
  }
458
494
 
459
495
  // Returns a copy or new doctype for a document.
@@ -490,17 +526,19 @@
490
526
  // allow snake_case or camelCase
491
527
  enableJavaScript = options === null || options === void 0 ? void 0 : options.enable_javascript,
492
528
  domTransformation = options === null || options === void 0 ? void 0 : options.dom_transformation,
493
- stringifyResponse = options === null || options === void 0 ? void 0 : options.stringify_response
529
+ stringifyResponse = options === null || options === void 0 ? void 0 : options.stringify_response,
530
+ disableShadowDOM = options === null || options === void 0 ? void 0 : options.disable_shadow_dom
494
531
  } = options || {};
495
532
 
496
533
  // keep certain records throughout serialization
497
534
  let ctx = {
498
535
  resources: new Set(),
499
536
  warnings: new Set(),
500
- enableJavaScript
537
+ enableJavaScript,
538
+ disableShadowDOM
501
539
  };
502
540
  ctx.dom = dom;
503
- ctx.clone = cloneNodeAndShadow(ctx.dom);
541
+ ctx.clone = cloneNodeAndShadow(ctx);
504
542
  serializeInputElements(ctx);
505
543
  serializeFrames(ctx);
506
544
  serializeVideos(ctx);
@@ -515,7 +553,9 @@
515
553
  console.error('Could not transform the dom:', err.message);
516
554
  }
517
555
  }
518
- injectDeclarativeShadowDOMPolyfill(ctx);
556
+ if (!disableShadowDOM) {
557
+ injectDeclarativeShadowDOMPolyfill(ctx);
558
+ }
519
559
  let result = {
520
560
  html: serializeHTML(ctx),
521
561
  warnings: Array.from(ctx.warnings),
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.js","sources":["../src/prepare-dom.js","../src/serialize-inputs.js","../src/serialize-frames.js","../src/serialize-cssom.js","../src/utils.js","../src/serialize-canvas.js","../src/serialize-video.js","../src/serialize-dom.js"],"sourcesContent":["// Returns a mostly random uid.\nfunction uid() {\n return `_${Math.random().toString(36).substr(2, 9)}`;\n}\n\n// Marks elements that are to be serialized later with a data attribute.\nexport function prepareDOM(dom) {\n for (let elem of dom.querySelectorAll('input, textarea, select, iframe, canvas, video, style')) {\n if (!elem.getAttribute('data-percy-element-id')) {\n elem.setAttribute('data-percy-element-id', uid());\n }\n }\n\n return dom;\n}\n\nexport default prepareDOM;\n","// Translates JavaScript properties of inputs into DOM attributes.\nexport function serializeInputElements({ dom, clone }) {\n for (let elem of dom.querySelectorAll('input, textarea, select')) {\n let inputId = elem.getAttribute('data-percy-element-id');\n let cloneEl = clone.querySelector(`[data-percy-element-id=\"${inputId}\"]`);\n\n switch (elem.type) {\n case 'checkbox':\n case 'radio':\n if (elem.checked) {\n cloneEl.setAttribute('checked', '');\n }\n break;\n case 'select-one':\n if (elem.selectedIndex !== -1) {\n cloneEl.options[elem.selectedIndex].setAttribute('selected', 'true');\n }\n break;\n case 'select-multiple':\n for (let option of elem.selectedOptions) {\n cloneEl.options[option.index].setAttribute('selected', 'true');\n }\n break;\n case 'textarea':\n cloneEl.innerHTML = elem.value;\n break;\n default:\n cloneEl.setAttribute('value', elem.value);\n }\n }\n}\n\nexport default serializeInputElements;\n","import serializeDOM from './serialize-dom';\n\n// Adds a `<base>` element to the serialized iframe's `<head>`. This is necessary when\n// embedded documents are serialized and their contents become root-relative.\nfunction setBaseURI(dom) {\n if (!new URL(dom.baseURI).hostname) return;\n\n let $base = document.createElement('base');\n $base.href = dom.baseURI;\n\n dom.querySelector('head').prepend($base);\n}\n\n// Recursively serializes iframe documents into srcdoc attributes.\nexport function serializeFrames({ dom, clone, warnings, resources, enableJavaScript }) {\n for (let frame of dom.querySelectorAll('iframe')) {\n let percyElementId = frame.getAttribute('data-percy-element-id');\n let cloneEl = clone.querySelector(`[data-percy-element-id=\"${percyElementId}\"]`);\n let builtWithJs = !frame.srcdoc && (!frame.src || frame.src.split(':')[0] === 'javascript');\n\n // delete frames within the head since they usually break pages when\n // rerendered and do not effect the visuals of a page\n if (clone.head.contains(cloneEl)) {\n cloneEl.remove();\n\n // if the frame document is accessible and not empty, we can serialize it\n } else if (frame.contentDocument && frame.contentDocument.documentElement) {\n // js is enabled and this frame was built with js, don't serialize it\n if (enableJavaScript && builtWithJs) continue;\n\n // the frame has yet to load and wasn't built with js, it is unsafe to serialize\n if (!builtWithJs && !frame.contentWindow.performance.timing.loadEventEnd) continue;\n\n // recersively serialize contents\n let serialized = serializeDOM({\n domTransformation: setBaseURI,\n dom: frame.contentDocument,\n enableJavaScript\n });\n\n // append serialized warnings and resources\n /* istanbul ignore next: warnings not implemented yet */\n for (let w of serialized.warnings) warnings.add(w);\n for (let r of serialized.resources) resources.add(r);\n\n // assign serialized html to srcdoc and remove src\n cloneEl.setAttribute('srcdoc', serialized.html);\n cloneEl.removeAttribute('src');\n\n // delete inaccessible frames built with js when js is disabled because they\n // break asset discovery by creating non-captured requests that hang\n } else if (!enableJavaScript && builtWithJs) {\n cloneEl.remove();\n }\n }\n}\n\nexport default serializeFrames;\n","// Returns true if a stylesheet is a CSSOM-based stylesheet.\nfunction isCSSOM(styleSheet) {\n // no href, has a rulesheet, and has an owner node\n return !styleSheet.href && styleSheet.cssRules && styleSheet.ownerNode;\n}\n\n// Returns false if any stylesheet rules do not match between two stylesheets\nfunction styleSheetsMatch(sheetA, sheetB) {\n for (let i = 0; i < sheetA.cssRules.length; i++) {\n let ruleA = sheetA.cssRules[i].cssText;\n let ruleB = sheetB.cssRules[i]?.cssText;\n if (ruleA !== ruleB) return false;\n }\n\n return true;\n}\n\n// Outputs in-memory CSSOM into their respective DOM nodes.\nexport function serializeCSSOM({ dom, clone }) {\n for (let styleSheet of dom.styleSheets) {\n if (isCSSOM(styleSheet)) {\n let styleId = styleSheet.ownerNode.getAttribute('data-percy-element-id');\n let cloneOwnerNode = clone.querySelector(`[data-percy-element-id=\"${styleId}\"]`);\n if (styleSheetsMatch(styleSheet, cloneOwnerNode.sheet)) continue;\n let style = clone.createElement('style');\n\n style.type = 'text/css';\n style.setAttribute('data-percy-element-id', styleId);\n style.setAttribute('data-percy-cssom-serialized', 'true');\n style.innerHTML = Array.from(styleSheet.cssRules)\n .map(cssRule => cssRule.cssText).join('\\n');\n\n cloneOwnerNode.parentNode.insertBefore(style, cloneOwnerNode.nextSibling);\n cloneOwnerNode.remove();\n }\n }\n}\n\nexport default serializeCSSOM;\n","// Creates a resource object from an element's unique ID and data URL\nexport function resourceFromDataURL(uid, dataURL) {\n // split dataURL into desired parts\n let [data, content] = dataURL.split(',');\n let [, mimetype] = data.split(':');\n [mimetype] = mimetype.split(';');\n\n // build a URL for the serialized asset\n let [, ext] = mimetype.split('/');\n let path = `/__serialized__/${uid}.${ext}`;\n let url = new URL(path, document.URL).toString();\n\n // return the url, base64 content, and mimetype\n return { url, content, mimetype };\n}\n","import { resourceFromDataURL } from './utils.js';\n\n// Serialize in-memory canvas elements into images.\nexport function serializeCanvas({ dom, clone, resources }) {\n for (let canvas of dom.querySelectorAll('canvas')) {\n // Note: the `.toDataURL` API requires WebGL canvas elements to use\n // `preserveDrawingBuffer: true`. This is because `.toDataURL` uses the\n // drawing buffer, which is cleared after each render for WebGL by default.\n let dataUrl = canvas.toDataURL();\n\n // skip empty canvases\n if (!dataUrl || dataUrl === 'data:,') continue;\n\n // get the element's percy id and create a resource for it\n let percyElementId = canvas.getAttribute('data-percy-element-id');\n let resource = resourceFromDataURL(percyElementId, dataUrl);\n resources.add(resource);\n\n // create an image element in the cloned dom\n let img = clone.createElement('img');\n // use a data attribute to avoid making a real request\n img.setAttribute('data-percy-serialized-attribute-src', resource.url);\n\n // copy canvas element attributes to the image element such as style, class,\n // or data attributes that may be targeted by CSS\n for (let { name, value } of canvas.attributes) {\n img.setAttribute(name, value);\n }\n\n // mark the image as serialized (can be targeted by CSS)\n img.setAttribute('data-percy-canvas-serialized', '');\n // set a default max width to account for canvases that might resize with JS\n img.style.maxWidth = img.style.maxWidth || '100%';\n\n // insert the image into the cloned DOM and remove the cloned canvas element\n let cloneEl = clone.querySelector(`[data-percy-element-id=${percyElementId}]`);\n cloneEl.parentElement.insertBefore(img, cloneEl);\n cloneEl.remove();\n }\n}\n\nexport default serializeCanvas;\n","import { resourceFromDataURL } from './utils.js';\n\n// Captures the current frame of videos and sets the poster image\nexport function serializeVideos({ dom, clone, resources }) {\n for (let video of dom.querySelectorAll('video')) {\n // if the video already has a poster image, no work for us to do\n if (video.getAttribute('poster')) continue;\n\n let videoId = video.getAttribute('data-percy-element-id');\n let cloneEl = clone.querySelector(`[data-percy-element-id=\"${videoId}\"]`);\n let canvas = document.createElement('canvas');\n let width = canvas.width = video.videoWidth;\n let height = canvas.height = video.videoHeight;\n let dataUrl;\n\n canvas.getContext('2d').drawImage(video, 0, 0, width, height);\n try { dataUrl = canvas.toDataURL(); } catch {}\n\n // if the canvas produces a blank image, skip\n if (!dataUrl || dataUrl === 'data:,') continue;\n\n // create a resource from the serialized data url\n let resource = resourceFromDataURL(videoId, dataUrl);\n resources.add(resource);\n\n // use a data attribute to avoid making a real request\n cloneEl.setAttribute('data-percy-serialized-attribute-poster', resource.url);\n }\n}\n\nexport default serializeVideos;\n","import prepareDOM from './prepare-dom';\nimport serializeInputs from './serialize-inputs';\nimport serializeFrames from './serialize-frames';\nimport serializeCSSOM from './serialize-cssom';\nimport serializeCanvas from './serialize-canvas';\nimport serializeVideos from './serialize-video';\n\n// Returns a copy or new doctype for a document.\nfunction doctype(dom) {\n let { name = 'html', publicId = '', systemId = '' } = dom?.doctype ?? {};\n let deprecated = '';\n\n if (publicId && systemId) {\n deprecated = ` PUBLIC \"${publicId}\" \"${systemId}\"`;\n } else if (publicId) {\n deprecated = ` PUBLIC \"${publicId}\"`;\n } else if (systemId) {\n deprecated = ` SYSTEM \"${systemId}\"`;\n }\n\n return `<!DOCTYPE ${name}${deprecated}>`;\n}\n\n// Serializes and returns the cloned DOM as an HTML string\nfunction serializeHTML(ctx) {\n let html = ctx.clone.documentElement.outerHTML;\n // replace serialized data attributes with real attributes\n html = html.replace(/ data-percy-serialized-attribute-(\\w+?)=/ig, ' $1=');\n // include the doctype with the html string\n return doctype(ctx.dom) + html;\n}\n\n// Serializes a document and returns the resulting DOM string.\nexport function serializeDOM(options) {\n let {\n dom = document,\n // allow snake_case or camelCase\n enableJavaScript = options?.enable_javascript,\n domTransformation = options?.dom_transformation,\n stringifyResponse = options?.stringify_response\n } = options || {};\n\n // keep certain records throughout serialization\n let ctx = {\n resources: new Set(),\n warnings: new Set(),\n enableJavaScript\n };\n\n ctx.dom = prepareDOM(dom);\n ctx.clone = ctx.dom.cloneNode(true);\n\n serializeInputs(ctx);\n serializeFrames(ctx);\n serializeVideos(ctx);\n\n if (!enableJavaScript) {\n serializeCSSOM(ctx);\n serializeCanvas(ctx);\n }\n\n if (domTransformation) {\n try {\n domTransformation(ctx.clone.documentElement);\n } catch (err) {\n console.error('Could not transform the dom:', err.message);\n }\n }\n\n let result = {\n html: serializeHTML(ctx),\n warnings: Array.from(ctx.warnings),\n resources: Array.from(ctx.resources)\n };\n\n return stringifyResponse\n ? JSON.stringify(result)\n : result;\n}\n\nexport default serializeDOM;\n"],"names":["uid","Math","random","toString","substr","prepareDOM","dom","elem","querySelectorAll","getAttribute","setAttribute","serializeInputElements","clone","inputId","cloneEl","querySelector","type","checked","selectedIndex","options","option","selectedOptions","index","innerHTML","value","setBaseURI","URL","baseURI","hostname","$base","document","createElement","href","prepend","serializeFrames","warnings","resources","enableJavaScript","frame","percyElementId","builtWithJs","srcdoc","src","split","head","contains","remove","contentDocument","documentElement","contentWindow","performance","timing","loadEventEnd","serialized","serializeDOM","domTransformation","w","add","r","html","removeAttribute","isCSSOM","styleSheet","cssRules","ownerNode","styleSheetsMatch","sheetA","sheetB","i","length","ruleA","cssText","ruleB","serializeCSSOM","styleSheets","styleId","cloneOwnerNode","sheet","style","Array","from","map","cssRule","join","parentNode","insertBefore","nextSibling","resourceFromDataURL","dataURL","data","content","mimetype","ext","path","url","serializeCanvas","canvas","dataUrl","toDataURL","resource","img","name","attributes","maxWidth","parentElement","serializeVideos","video","videoId","width","videoWidth","height","videoHeight","getContext","drawImage","doctype","publicId","systemId","deprecated","serializeHTML","ctx","outerHTML","replace","enable_javascript","dom_transformation","stringifyResponse","stringify_response","Set","cloneNode","serializeInputs","err","console","error","message","result","JSON","stringify"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@percy/dom",
3
- "version": "1.19.1-alpha.0",
3
+ "version": "1.19.2-alpha.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -34,5 +34,5 @@
34
34
  "devDependencies": {
35
35
  "interactor.js": "^2.0.0-beta.10"
36
36
  },
37
- "gitHead": "1a95e827ef2fb7e6f2c7a7a5a90d265185f31fc2"
37
+ "gitHead": "d9bf82889731f5cdc3f7fa4fe836cc5232ee8fb6"
38
38
  }