Best JavaScript code snippet using playwright-internal
ReactDOMComponent.js
Source:ReactDOMComponent.js
...110 testElement.innerHTML = html;111 return testElement.innerHTML;112 };113 }114 function ensureListeningTo(rootContainerElement, registrationName) {115 var isDocumentOrFragment = rootContainerElement.nodeType === DOCUMENT_NODE || rootContainerElement.nodeType === DOCUMENT_FRAGMENT_NODE;116 var doc = isDocumentOrFragment ? rootContainerElement : rootContainerElement.ownerDocument;117 legacyListenToEvent(registrationName, doc);118 }119 function getOwnerDocumentFromRootContainer(rootContainerElement) {120 return rootContainerElement.nodeType === DOCUMENT_NODE ? rootContainerElement : rootContainerElement.ownerDocument;121 }122 function noop() {}123 function trapClickOnNonInteractiveElement(node) {124 // Mobile Safari does not fire properly bubble click events on125 // non-interactive elements, which means delegated click listeners do not126 // fire. The workaround for this bug involves attaching an empty click127 // listener on the target node.128 // http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html129 // Just set it using the onclick property so that we don't have to manage any130 // bookkeeping for it. Not sure if we need to clear it when the listener is131 // removed.132 // TODO: Only do this for the relevant Safaris maybe?133 node.onclick = noop;134 }135 function setInitialDOMProperties(tag, domElement, rootContainerElement, nextProps, isCustomComponentTag) {136 for (var propKey in nextProps) {137 if (!nextProps.hasOwnProperty(propKey)) {138 continue;139 }140 var nextProp = nextProps[propKey];141 if (propKey === STYLE) {142 {143 if (nextProp) {144 // Freeze the next style object so that we can assume it won't be145 // mutated. We have already warned for this in the past.146 Object.freeze(nextProp);147 }148 } // Relies on `updateStylesByID` not mutating `styleUpdates`.149 setValueForStyles(domElement, nextProp);150 } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {151 var nextHtml = nextProp ? nextProp[HTML$1] : undefined;152 if (nextHtml != null) {153 setInnerHTML(domElement, nextHtml);154 }155 } else if (propKey === CHILDREN) {156 if (typeof nextProp === 'string') {157 // Avoid setting initial textContent when the text is empty. In IE11 setting158 // textContent on a <textarea> will cause the placeholder to not159 // show within the <textarea> until it has been focused and blurred again.160 // https://github.com/facebook/react/issues/6731#issuecomment-254874553161 var canSetTextContent = tag !== 'textarea' || nextProp !== '';162 if (canSetTextContent) {163 setTextContent(domElement, nextProp);164 }165 } else if (typeof nextProp === 'number') {166 setTextContent(domElement, '' + nextProp);167 }168 } else if ( propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (propKey === AUTOFOCUS) ; else if (registrationNameModules.hasOwnProperty(propKey)) {169 if (nextProp != null) {170 if ( typeof nextProp !== 'function') {171 warnForInvalidEventListener(propKey, nextProp);172 }173 ensureListeningTo(rootContainerElement, propKey);174 }175 } else if (nextProp != null) {176 setValueForProperty(domElement, propKey, nextProp, isCustomComponentTag);177 }178 }179 }180 function updateDOMProperties(domElement, updatePayload, wasCustomComponentTag, isCustomComponentTag) {181 // TODO: Handle wasCustomComponentTag182 for (var i = 0; i < updatePayload.length; i += 2) {183 var propKey = updatePayload[i];184 var propValue = updatePayload[i + 1];185 if (propKey === STYLE) {186 setValueForStyles(domElement, propValue);187 } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {188 setInnerHTML(domElement, propValue);189 } else if (propKey === CHILDREN) {190 setTextContent(domElement, propValue);191 } else {192 setValueForProperty(domElement, propKey, propValue, isCustomComponentTag);193 }194 }195 }196 function createElement(type, props, rootContainerElement, parentNamespace) {197 var isCustomComponentTag; // We create tags in the namespace of their parent container, except HTML198 // tags get no namespace.199 var ownerDocument = getOwnerDocumentFromRootContainer(rootContainerElement);200 var domElement;201 var namespaceURI = parentNamespace;202 if (namespaceURI === HTML_NAMESPACE$1) {203 namespaceURI = getIntrinsicNamespace(type);204 }205 if (namespaceURI === HTML_NAMESPACE$1) {206 {207 isCustomComponentTag = isCustomComponent(type, props); // Should this check be gated by parent namespace? Not sure we want to208 // allow <SVG> or <mATH>.209 if (!isCustomComponentTag && type !== type.toLowerCase()) {210 error('<%s /> is using incorrect casing. ' + 'Use PascalCase for React components, ' + 'or lowercase for HTML elements.', type);211 }212 }213 if (type === 'script') {214 // Create the script via .innerHTML so its "parser-inserted" flag is215 // set to true and it does not execute216 var div = ownerDocument.createElement('div');217 div.innerHTML = '<script><' + '/script>'; // eslint-disable-line218 // This is guaranteed to yield a script element.219 var firstChild = div.firstChild;220 domElement = div.removeChild(firstChild);221 } else if (typeof props.is === 'string') {222 // $FlowIssue `createElement` should be updated for Web Components223 domElement = ownerDocument.createElement(type, {224 is: props.is225 });226 } else {227 // Separate else branch instead of using `props.is || undefined` above because of a Firefox bug.228 // See discussion in https://github.com/facebook/react/pull/6896229 // and discussion in https://bugzilla.mozilla.org/show_bug.cgi?id=1276240230 domElement = ownerDocument.createElement(type); // Normally attributes are assigned in `setInitialDOMProperties`, however the `multiple` and `size`231 // attributes on `select`s needs to be added before `option`s are inserted.232 // This prevents:233 // - a bug where the `select` does not scroll to the correct option because singular234 // `select` elements automatically pick the first item #13222235 // - a bug where the `select` set the first item as selected despite the `size` attribute #14239236 // See https://github.com/facebook/react/issues/13222237 // and https://github.com/facebook/react/issues/14239238 if (type === 'select') {239 var node = domElement;240 if (props.multiple) {241 node.multiple = true;242 } else if (props.size) {243 // Setting a size greater than 1 causes a select to behave like `multiple=true`, where244 // it is possible that no option is selected.245 //246 // This is only necessary when a select in "single selection mode".247 node.size = props.size;248 }249 }250 }251 } else {252 domElement = ownerDocument.createElementNS(namespaceURI, type);253 }254 {255 if (namespaceURI === HTML_NAMESPACE$1) {256 if (!isCustomComponentTag && Object.prototype.toString.call(domElement) === '[object HTMLUnknownElement]' && !Object.prototype.hasOwnProperty.call(warnedUnknownTags, type)) {257 warnedUnknownTags[type] = true;258 error('The tag <%s> is unrecognized in this browser. ' + 'If you meant to render a React component, start its name with ' + 'an uppercase letter.', type);259 }260 }261 }262 return domElement;263 }264 function createTextNode(text, rootContainerElement) {265 return getOwnerDocumentFromRootContainer(rootContainerElement).createTextNode(text);266 }267 function setInitialProperties(domElement, tag, rawProps, rootContainerElement) {268 var isCustomComponentTag = isCustomComponent(tag, rawProps);269 {270 validatePropertiesInDevelopment(tag, rawProps);271 } // TODO: Make sure that we check isMounted before firing any of these events.272 var props;273 switch (tag) {274 case 'iframe':275 case 'object':276 case 'embed':277 trapBubbledEvent(TOP_LOAD, domElement);278 props = rawProps;279 break;280 case 'video':281 case 'audio':282 // Create listener for each media event283 for (var i = 0; i < mediaEventTypes.length; i++) {284 trapBubbledEvent(mediaEventTypes[i], domElement);285 }286 props = rawProps;287 break;288 case 'source':289 trapBubbledEvent(TOP_ERROR, domElement);290 props = rawProps;291 break;292 case 'img':293 case 'image':294 case 'link':295 trapBubbledEvent(TOP_ERROR, domElement);296 trapBubbledEvent(TOP_LOAD, domElement);297 props = rawProps;298 break;299 case 'form':300 trapBubbledEvent(TOP_RESET, domElement);301 trapBubbledEvent(TOP_SUBMIT, domElement);302 props = rawProps;303 break;304 case 'details':305 trapBubbledEvent(TOP_TOGGLE, domElement);306 props = rawProps;307 break;308 case 'input':309 initWrapperState(domElement, rawProps);310 props = getHostProps(domElement, rawProps);311 trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening312 // to onChange. Even if there is no listener.313 ensureListeningTo(rootContainerElement, 'onChange');314 break;315 case 'option':316 validateProps(domElement, rawProps);317 props = getHostProps$1(domElement, rawProps);318 break;319 case 'select':320 initWrapperState$1(domElement, rawProps);321 props = getHostProps$2(domElement, rawProps);322 trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening323 // to onChange. Even if there is no listener.324 ensureListeningTo(rootContainerElement, 'onChange');325 break;326 case 'textarea':327 initWrapperState$2(domElement, rawProps);328 props = getHostProps$3(domElement, rawProps);329 trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening330 // to onChange. Even if there is no listener.331 ensureListeningTo(rootContainerElement, 'onChange');332 break;333 default:334 props = rawProps;335 }336 assertValidProps(tag, props);337 setInitialDOMProperties(tag, domElement, rootContainerElement, props, isCustomComponentTag);338 switch (tag) {339 case 'input':340 // TODO: Make sure we check if this is still unmounted or do any clean341 // up necessary since we never stop tracking anymore.342 track(domElement);343 postMountWrapper(domElement, rawProps, false);344 break;345 case 'textarea':346 // TODO: Make sure we check if this is still unmounted or do any clean347 // up necessary since we never stop tracking anymore.348 track(domElement);349 postMountWrapper$3(domElement);350 break;351 case 'option':352 postMountWrapper$1(domElement, rawProps);353 break;354 case 'select':355 postMountWrapper$2(domElement, rawProps);356 break;357 default:358 if (typeof props.onClick === 'function') {359 // TODO: This cast may not be sound for SVG, MathML or custom elements.360 trapClickOnNonInteractiveElement(domElement);361 }362 break;363 }364 } // Calculate the diff between the two objects.365 function diffProperties(domElement, tag, lastRawProps, nextRawProps, rootContainerElement) {366 {367 validatePropertiesInDevelopment(tag, nextRawProps);368 }369 var updatePayload = null;370 var lastProps;371 var nextProps;372 switch (tag) {373 case 'input':374 lastProps = getHostProps(domElement, lastRawProps);375 nextProps = getHostProps(domElement, nextRawProps);376 updatePayload = [];377 break;378 case 'option':379 lastProps = getHostProps$1(domElement, lastRawProps);380 nextProps = getHostProps$1(domElement, nextRawProps);381 updatePayload = [];382 break;383 case 'select':384 lastProps = getHostProps$2(domElement, lastRawProps);385 nextProps = getHostProps$2(domElement, nextRawProps);386 updatePayload = [];387 break;388 case 'textarea':389 lastProps = getHostProps$3(domElement, lastRawProps);390 nextProps = getHostProps$3(domElement, nextRawProps);391 updatePayload = [];392 break;393 default:394 lastProps = lastRawProps;395 nextProps = nextRawProps;396 if (typeof lastProps.onClick !== 'function' && typeof nextProps.onClick === 'function') {397 // TODO: This cast may not be sound for SVG, MathML or custom elements.398 trapClickOnNonInteractiveElement(domElement);399 }400 break;401 }402 assertValidProps(tag, nextProps);403 var propKey;404 var styleName;405 var styleUpdates = null;406 for (propKey in lastProps) {407 if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey) || lastProps[propKey] == null) {408 continue;409 }410 if (propKey === STYLE) {411 var lastStyle = lastProps[propKey];412 for (styleName in lastStyle) {413 if (lastStyle.hasOwnProperty(styleName)) {414 if (!styleUpdates) {415 styleUpdates = {};416 }417 styleUpdates[styleName] = '';418 }419 }420 } else if (propKey === DANGEROUSLY_SET_INNER_HTML || propKey === CHILDREN) ; else if ( propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (propKey === AUTOFOCUS) ; else if (registrationNameModules.hasOwnProperty(propKey)) {421 // This is a special case. If any listener updates we need to ensure422 // that the "current" fiber pointer gets updated so we need a commit423 // to update this element.424 if (!updatePayload) {425 updatePayload = [];426 }427 } else {428 // For all other deleted properties we add it to the queue. We use429 // the whitelist in the commit phase instead.430 (updatePayload = updatePayload || []).push(propKey, null);431 }432 }433 for (propKey in nextProps) {434 var nextProp = nextProps[propKey];435 var lastProp = lastProps != null ? lastProps[propKey] : undefined;436 if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp || nextProp == null && lastProp == null) {437 continue;438 }439 if (propKey === STYLE) {440 {441 if (nextProp) {442 // Freeze the next style object so that we can assume it won't be443 // mutated. We have already warned for this in the past.444 Object.freeze(nextProp);445 }446 }447 if (lastProp) {448 // Unset styles on `lastProp` but not on `nextProp`.449 for (styleName in lastProp) {450 if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {451 if (!styleUpdates) {452 styleUpdates = {};453 }454 styleUpdates[styleName] = '';455 }456 } // Update styles that changed since `lastProp`.457 for (styleName in nextProp) {458 if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) {459 if (!styleUpdates) {460 styleUpdates = {};461 }462 styleUpdates[styleName] = nextProp[styleName];463 }464 }465 } else {466 // Relies on `updateStylesByID` not mutating `styleUpdates`.467 if (!styleUpdates) {468 if (!updatePayload) {469 updatePayload = [];470 }471 updatePayload.push(propKey, styleUpdates);472 }473 styleUpdates = nextProp;474 }475 } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {476 var nextHtml = nextProp ? nextProp[HTML$1] : undefined;477 var lastHtml = lastProp ? lastProp[HTML$1] : undefined;478 if (nextHtml != null) {479 if (lastHtml !== nextHtml) {480 (updatePayload = updatePayload || []).push(propKey, nextHtml);481 }482 }483 } else if (propKey === CHILDREN) {484 if (lastProp !== nextProp && (typeof nextProp === 'string' || typeof nextProp === 'number')) {485 (updatePayload = updatePayload || []).push(propKey, '' + nextProp);486 }487 } else if ( propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (registrationNameModules.hasOwnProperty(propKey)) {488 if (nextProp != null) {489 // We eagerly listen to this even though we haven't committed yet.490 if ( typeof nextProp !== 'function') {491 warnForInvalidEventListener(propKey, nextProp);492 }493 ensureListeningTo(rootContainerElement, propKey);494 }495 if (!updatePayload && lastProp !== nextProp) {496 // This is a special case. If any listener updates we need to ensure497 // that the "current" props pointer gets updated so we need a commit498 // to update this element.499 updatePayload = [];500 }501 } else {502 // For any other property we always add it to the queue and then we503 // filter it out using the whitelist during the commit.504 (updatePayload = updatePayload || []).push(propKey, nextProp);505 }506 }507 if (styleUpdates) {508 {509 validateShorthandPropertyCollisionInDev(styleUpdates, nextProps[STYLE]);510 }511 (updatePayload = updatePayload || []).push(STYLE, styleUpdates);512 }513 return updatePayload;514 } // Apply the diff.515 function updateProperties(domElement, updatePayload, tag, lastRawProps, nextRawProps) {516 // Update checked *before* name.517 // In the middle of an update, it is possible to have multiple checked.518 // When a checked radio tries to change name, browser makes another radio's checked false.519 if (tag === 'input' && nextRawProps.type === 'radio' && nextRawProps.name != null) {520 updateChecked(domElement, nextRawProps);521 }522 var wasCustomComponentTag = isCustomComponent(tag, lastRawProps);523 var isCustomComponentTag = isCustomComponent(tag, nextRawProps); // Apply the diff.524 updateDOMProperties(domElement, updatePayload, wasCustomComponentTag, isCustomComponentTag); // TODO: Ensure that an update gets scheduled if any of the special props525 // changed.526 switch (tag) {527 case 'input':528 // Update the wrapper around inputs *after* updating props. This has to529 // happen after `updateDOMProperties`. Otherwise HTML5 input validations530 // raise warnings and prevent the new value from being assigned.531 updateWrapper(domElement, nextRawProps);532 break;533 case 'textarea':534 updateWrapper$1(domElement, nextRawProps);535 break;536 case 'select':537 // <select> value update needs to occur after <option> children538 // reconciliation539 postUpdateWrapper(domElement, nextRawProps);540 break;541 }542 }543 function getPossibleStandardName(propName) {544 {545 var lowerCasedName = propName.toLowerCase();546 if (!possibleStandardNames.hasOwnProperty(lowerCasedName)) {547 return null;548 }549 return possibleStandardNames[lowerCasedName] || null;550 }551 }552 function diffHydratedProperties(domElement, tag, rawProps, parentNamespace, rootContainerElement) {553 var isCustomComponentTag;554 var extraAttributeNames;555 {556 suppressHydrationWarning = rawProps[SUPPRESS_HYDRATION_WARNING] === true;557 isCustomComponentTag = isCustomComponent(tag, rawProps);558 validatePropertiesInDevelopment(tag, rawProps);559 } // TODO: Make sure that we check isMounted before firing any of these events.560 switch (tag) {561 case 'iframe':562 case 'object':563 case 'embed':564 trapBubbledEvent(TOP_LOAD, domElement);565 break;566 case 'video':567 case 'audio':568 // Create listener for each media event569 for (var i = 0; i < mediaEventTypes.length; i++) {570 trapBubbledEvent(mediaEventTypes[i], domElement);571 }572 break;573 case 'source':574 trapBubbledEvent(TOP_ERROR, domElement);575 break;576 case 'img':577 case 'image':578 case 'link':579 trapBubbledEvent(TOP_ERROR, domElement);580 trapBubbledEvent(TOP_LOAD, domElement);581 break;582 case 'form':583 trapBubbledEvent(TOP_RESET, domElement);584 trapBubbledEvent(TOP_SUBMIT, domElement);585 break;586 case 'details':587 trapBubbledEvent(TOP_TOGGLE, domElement);588 break;589 case 'input':590 initWrapperState(domElement, rawProps);591 trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening592 // to onChange. Even if there is no listener.593 ensureListeningTo(rootContainerElement, 'onChange');594 break;595 case 'option':596 validateProps(domElement, rawProps);597 break;598 case 'select':599 initWrapperState$1(domElement, rawProps);600 trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening601 // to onChange. Even if there is no listener.602 ensureListeningTo(rootContainerElement, 'onChange');603 break;604 case 'textarea':605 initWrapperState$2(domElement, rawProps);606 trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening607 // to onChange. Even if there is no listener.608 ensureListeningTo(rootContainerElement, 'onChange');609 break;610 }611 assertValidProps(tag, rawProps);612 {613 extraAttributeNames = new Set();614 var attributes = domElement.attributes;615 for (var _i = 0; _i < attributes.length; _i++) {616 var name = attributes[_i].name.toLowerCase();617 switch (name) {618 // Built-in SSR attribute is whitelisted619 case 'data-reactroot':620 break;621 // Controlled attributes are not validated622 // TODO: Only ignore them on controlled tags.623 case 'value':624 break;625 case 'checked':626 break;627 case 'selected':628 break;629 default:630 // Intentionally use the original name.631 // See discussion in https://github.com/facebook/react/pull/10676.632 extraAttributeNames.add(attributes[_i].name);633 }634 }635 }636 var updatePayload = null;637 for (var propKey in rawProps) {638 if (!rawProps.hasOwnProperty(propKey)) {639 continue;640 }641 var nextProp = rawProps[propKey];642 if (propKey === CHILDREN) {643 // For text content children we compare against textContent. This644 // might match additional HTML that is hidden when we read it using645 // textContent. E.g. "foo" will match "f<span>oo</span>" but that still646 // satisfies our requirement. Our requirement is not to produce perfect647 // HTML and attributes. Ideally we should preserve structure but it's648 // ok not to if the visible content is still enough to indicate what649 // even listeners these nodes might be wired up to.650 // TODO: Warn if there is more than a single textNode as a child.651 // TODO: Should we use domElement.firstChild.nodeValue to compare?652 if (typeof nextProp === 'string') {653 if (domElement.textContent !== nextProp) {654 if ( !suppressHydrationWarning) {655 warnForTextDifference(domElement.textContent, nextProp);656 }657 updatePayload = [CHILDREN, nextProp];658 }659 } else if (typeof nextProp === 'number') {660 if (domElement.textContent !== '' + nextProp) {661 if ( !suppressHydrationWarning) {662 warnForTextDifference(domElement.textContent, nextProp);663 }664 updatePayload = [CHILDREN, '' + nextProp];665 }666 }667 } else if (registrationNameModules.hasOwnProperty(propKey)) {668 if (nextProp != null) {669 if ( typeof nextProp !== 'function') {670 warnForInvalidEventListener(propKey, nextProp);671 }672 ensureListeningTo(rootContainerElement, propKey);673 }674 } else if ( // Convince Flow we've calculated it (it's DEV-only in this method.)675 typeof isCustomComponentTag === 'boolean') {676 // Validate that the properties correspond to their expected values.677 var serverValue = void 0;678 var propertyInfo = getPropertyInfo(propKey);679 if (suppressHydrationWarning) ; else if ( propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING || // Controlled attributes are not validated680 // TODO: Only ignore them on controlled tags.681 propKey === 'value' || propKey === 'checked' || propKey === 'selected') ; else if (propKey === DANGEROUSLY_SET_INNER_HTML) {682 var serverHTML = domElement.innerHTML;683 var nextHtml = nextProp ? nextProp[HTML$1] : undefined;684 var expectedHTML = normalizeHTML(domElement, nextHtml != null ? nextHtml : '');685 if (expectedHTML !== serverHTML) {686 warnForPropDifference(propKey, serverHTML, expectedHTML);...
ReactDOMFiberComponent.js
Source:ReactDOMFiberComponent.js
...60 validateInputPropertes(type, props);61 validateUnknownPropertes(type, props);62 };63}64function ensureListeningTo(rootContainerElement, registrationName) {65 var isDocumentOrFragment =66 rootContainerElement.nodeType === DOCUMENT_NODE ||67 rootContainerElement.nodeType === DOCUMENT_FRAGMENT_NODE;68 var doc = isDocumentOrFragment69 ? rootContainerElement70 : rootContainerElement.ownerDocument;71 listenTo(registrationName, doc);72}73// There are so many media events, it makes sense to just74// maintain a list rather than create a `trapBubbledEvent` for each75var mediaEvents = {76 topAbort: 'abort',77 topCanPlay: 'canplay',78 topCanPlayThrough: 'canplaythrough',79 topDurationChange: 'durationchange',80 topEmptied: 'emptied',81 topEncrypted: 'encrypted',82 topEnded: 'ended',83 topError: 'error',84 topLoadedData: 'loadeddata',85 topLoadedMetadata: 'loadedmetadata',86 topLoadStart: 'loadstart',87 topPause: 'pause',88 topPlay: 'play',89 topPlaying: 'playing',90 topProgress: 'progress',91 topRateChange: 'ratechange',92 topSeeked: 'seeked',93 topSeeking: 'seeking',94 topStalled: 'stalled',95 topSuspend: 'suspend',96 topTimeUpdate: 'timeupdate',97 topVolumeChange: 'volumechange',98 topWaiting: 'waiting',99};100function trapClickOnNonInteractiveElement(node: HTMLElement) {101 // Mobile Safari does not fire properly bubble click events on102 // non-interactive elements, which means delegated click listeners do not103 // fire. The workaround for this bug involves attaching an empty click104 // listener on the target node.105 // http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html106 // Just set it using the onclick property so that we don't have to manage any107 // bookkeeping for it. Not sure if we need to clear it when the listener is108 // removed.109 // TODO: Only do this for the relevant Safaris maybe?110 node.onclick = emptyFunction;111}112function trapBubbledEventsLocal(node: Element, tag: string) {113 // If a component renders to null or if another component fatals and causes114 // the state of the tree to be corrupted, `node` here can be null.115 // TODO: Make sure that we check isMounted before firing any of these events.116 // TODO: Inline these below since we're calling this from an equivalent117 // switch statement.118 switch (tag) {119 case 'iframe':120 case 'object':121 ReactBrowserEventEmitter.trapBubbledEvent('topLoad', 'load', node);122 break;123 case 'video':124 case 'audio':125 // Create listener for each media event126 for (var event in mediaEvents) {127 if (mediaEvents.hasOwnProperty(event)) {128 ReactBrowserEventEmitter.trapBubbledEvent(129 event,130 mediaEvents[event],131 node,132 );133 }134 }135 break;136 case 'source':137 ReactBrowserEventEmitter.trapBubbledEvent('topError', 'error', node);138 break;139 case 'img':140 case 'image':141 ReactBrowserEventEmitter.trapBubbledEvent('topError', 'error', node);142 ReactBrowserEventEmitter.trapBubbledEvent('topLoad', 'load', node);143 break;144 case 'form':145 ReactBrowserEventEmitter.trapBubbledEvent('topReset', 'reset', node);146 ReactBrowserEventEmitter.trapBubbledEvent('topSubmit', 'submit', node);147 break;148 case 'input':149 case 'select':150 case 'textarea':151 ReactBrowserEventEmitter.trapBubbledEvent('topInvalid', 'invalid', node);152 break;153 case 'details':154 ReactBrowserEventEmitter.trapBubbledEvent('topToggle', 'toggle', node);155 break;156 }157}158function setInitialDOMProperties(159 domElement: Element,160 rootContainerElement: Element | Document,161 nextProps: Object,162 isCustomComponentTag: boolean,163): void {164 for (var propKey in nextProps) {165 if (!nextProps.hasOwnProperty(propKey)) {166 continue;167 }168 var nextProp = nextProps[propKey];169 if (propKey === STYLE) {170 if (__DEV__) {171 if (nextProp) {172 // Freeze the next style object so that we can assume it won't be173 // mutated. We have already warned for this in the past.174 Object.freeze(nextProp);175 }176 }177 // Relies on `updateStylesByID` not mutating `styleUpdates`.178 // TODO: call ReactInstrumentation.debugTool.onHostOperation in DEV.179 CSSPropertyOperations.setValueForStyles(domElement, nextProp);180 } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {181 var nextHtml = nextProp ? nextProp[HTML] : undefined;182 if (nextHtml != null) {183 setInnerHTML(domElement, nextHtml);184 }185 } else if (propKey === CHILDREN) {186 if (typeof nextProp === 'string') {187 setTextContent(domElement, nextProp);188 } else if (typeof nextProp === 'number') {189 setTextContent(domElement, '' + nextProp);190 }191 } else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING) {192 // Noop193 } else if (registrationNameModules.hasOwnProperty(propKey)) {194 if (nextProp) {195 ensureListeningTo(rootContainerElement, propKey);196 }197 } else if (isCustomComponentTag) {198 DOMPropertyOperations.setValueForAttribute(domElement, propKey, nextProp);199 } else if (200 DOMProperty.properties[propKey] ||201 DOMProperty.isCustomAttribute(propKey)202 ) {203 // If we're updating to null or undefined, we should remove the property204 // from the DOM node instead of inadvertently setting to a string. This205 // brings us in line with the same behavior we have on initial render.206 if (nextProp != null) {207 DOMPropertyOperations.setValueForProperty(208 domElement,209 propKey,210 nextProp,211 );212 }213 }214 }215}216function updateDOMProperties(217 domElement: Element,218 updatePayload: Array<any>,219 wasCustomComponentTag: boolean,220 isCustomComponentTag: boolean,221): void {222 // TODO: Handle wasCustomComponentTag223 for (var i = 0; i < updatePayload.length; i += 2) {224 var propKey = updatePayload[i];225 var propValue = updatePayload[i + 1];226 if (propKey === STYLE) {227 // TODO: call ReactInstrumentation.debugTool.onHostOperation in DEV.228 CSSPropertyOperations.setValueForStyles(domElement, propValue);229 } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {230 setInnerHTML(domElement, propValue);231 } else if (propKey === CHILDREN) {232 setTextContent(domElement, propValue);233 } else if (isCustomComponentTag) {234 if (propValue != null) {235 DOMPropertyOperations.setValueForAttribute(236 domElement,237 propKey,238 propValue,239 );240 } else {241 DOMPropertyOperations.deleteValueForAttribute(domElement, propKey);242 }243 } else if (244 DOMProperty.properties[propKey] ||245 DOMProperty.isCustomAttribute(propKey)246 ) {247 // If we're updating to null or undefined, we should remove the property248 // from the DOM node instead of inadvertently setting to a string. This249 // brings us in line with the same behavior we have on initial render.250 if (propValue != null) {251 DOMPropertyOperations.setValueForProperty(252 domElement,253 propKey,254 propValue,255 );256 } else {257 DOMPropertyOperations.deleteValueForProperty(domElement, propKey);258 }259 }260 }261}262// Assumes there is no parent namespace.263function getIntrinsicNamespace(type: string): string {264 switch (type) {265 case 'svg':266 return SVG_NAMESPACE;267 case 'math':268 return MATH_NAMESPACE;269 default:270 return HTML_NAMESPACE;271 }272}273var ReactDOMFiberComponent = {274 getChildNamespace(parentNamespace: string | null, type: string): string {275 if (parentNamespace == null || parentNamespace === HTML_NAMESPACE) {276 // No (or default) parent namespace: potential entry point.277 return getIntrinsicNamespace(type);278 }279 if (parentNamespace === SVG_NAMESPACE && type === 'foreignObject') {280 // We're leaving SVG.281 return HTML_NAMESPACE;282 }283 // By default, pass namespace below.284 return parentNamespace;285 },286 createElement(287 type: *,288 props: Object,289 rootContainerElement: Element | Document,290 parentNamespace: string,291 ): Element {292 // We create tags in the namespace of their parent container, except HTML293 // tags get no namespace.294 var ownerDocument: Document = rootContainerElement.nodeType ===295 DOCUMENT_NODE296 ? (rootContainerElement: any)297 : rootContainerElement.ownerDocument;298 var domElement: Element;299 var namespaceURI = parentNamespace;300 if (namespaceURI === HTML_NAMESPACE) {301 namespaceURI = getIntrinsicNamespace(type);302 }303 if (__DEV__) {304 var isCustomComponentTag = isCustomComponent(type, props);305 }306 if (namespaceURI === HTML_NAMESPACE) {307 if (__DEV__) {308 warning(309 isCustomComponentTag || type === type.toLowerCase(),310 '<%s /> is using uppercase HTML. Always use lowercase HTML tags ' +311 'in React.',312 type,313 );314 }315 if (type === 'script') {316 // Create the script via .innerHTML so its "parser-inserted" flag is317 // set to true and it does not execute318 var div = ownerDocument.createElement('div');319 div.innerHTML = '<script><' + '/script>'; // eslint-disable-line320 // This is guaranteed to yield a script element.321 var firstChild = ((div.firstChild: any): HTMLScriptElement);322 domElement = div.removeChild(firstChild);323 } else if (props.is) {324 // $FlowIssue `createElement` should be updated for Web Components325 domElement = ownerDocument.createElement(type, {is: props.is});326 } else {327 // Separate else branch instead of using `props.is || undefined` above because of a Firefox bug.328 // See discussion in https://github.com/facebook/react/pull/6896329 // and discussion in https://bugzilla.mozilla.org/show_bug.cgi?id=1276240330 domElement = ownerDocument.createElement(type);331 }332 } else {333 domElement = ownerDocument.createElementNS(namespaceURI, type);334 }335 if (__DEV__) {336 if (namespaceURI === HTML_NAMESPACE) {337 warning(338 isCustomComponentTag ||339 Object.prototype.toString.call(domElement) !==340 '[object HTMLUnknownElement]',341 'The tag <%s> is unrecognized in this browser. ' +342 'If you meant to render a React component, start its name with ' +343 'an uppercase letter.',344 type,345 );346 }347 }348 return domElement;349 },350 setInitialProperties(351 domElement: Element,352 tag: string,353 rawProps: Object,354 rootContainerElement: Element | Document,355 ): void {356 var isCustomComponentTag = isCustomComponent(tag, rawProps);357 if (__DEV__) {358 validatePropertiesInDevelopment(tag, rawProps);359 if (isCustomComponentTag && !didWarnShadyDOM && domElement.shadyRoot) {360 warning(361 false,362 '%s is using shady DOM. Using shady DOM with React can ' +363 'cause things to break subtly.',364 getCurrentFiberOwnerName() || 'A component',365 );366 didWarnShadyDOM = true;367 }368 }369 var props: Object;370 switch (tag) {371 case 'audio':372 case 'form':373 case 'iframe':374 case 'img':375 case 'image':376 case 'link':377 case 'object':378 case 'source':379 case 'video':380 case 'details':381 trapBubbledEventsLocal(domElement, tag);382 props = rawProps;383 break;384 case 'input':385 ReactDOMFiberInput.initWrapperState(domElement, rawProps);386 props = ReactDOMFiberInput.getHostProps(domElement, rawProps);387 trapBubbledEventsLocal(domElement, tag);388 // For controlled components we always need to ensure we're listening389 // to onChange. Even if there is no listener.390 ensureListeningTo(rootContainerElement, 'onChange');391 break;392 case 'option':393 ReactDOMFiberOption.validateProps(domElement, rawProps);394 props = ReactDOMFiberOption.getHostProps(domElement, rawProps);395 break;396 case 'select':397 ReactDOMFiberSelect.initWrapperState(domElement, rawProps);398 props = ReactDOMFiberSelect.getHostProps(domElement, rawProps);399 trapBubbledEventsLocal(domElement, tag);400 // For controlled components we always need to ensure we're listening401 // to onChange. Even if there is no listener.402 ensureListeningTo(rootContainerElement, 'onChange');403 break;404 case 'textarea':405 ReactDOMFiberTextarea.initWrapperState(domElement, rawProps);406 props = ReactDOMFiberTextarea.getHostProps(domElement, rawProps);407 trapBubbledEventsLocal(domElement, tag);408 // For controlled components we always need to ensure we're listening409 // to onChange. Even if there is no listener.410 ensureListeningTo(rootContainerElement, 'onChange');411 break;412 default:413 props = rawProps;414 }415 assertValidProps(tag, props, getCurrentFiberOwnerName);416 setInitialDOMProperties(417 domElement,418 rootContainerElement,419 props,420 isCustomComponentTag,421 );422 switch (tag) {423 case 'input':424 // TODO: Make sure we check if this is still unmounted or do any clean425 // up necessary since we never stop tracking anymore.426 inputValueTracking.trackNode((domElement: any));427 ReactDOMFiberInput.postMountWrapper(domElement, rawProps);428 break;429 case 'textarea':430 // TODO: Make sure we check if this is still unmounted or do any clean431 // up necessary since we never stop tracking anymore.432 inputValueTracking.trackNode((domElement: any));433 ReactDOMFiberTextarea.postMountWrapper(domElement, rawProps);434 break;435 case 'option':436 ReactDOMFiberOption.postMountWrapper(domElement, rawProps);437 break;438 case 'select':439 ReactDOMFiberSelect.postMountWrapper(domElement, rawProps);440 break;441 default:442 if (typeof props.onClick === 'function') {443 // TODO: This cast may not be sound for SVG, MathML or custom elements.444 trapClickOnNonInteractiveElement(((domElement: any): HTMLElement));445 }446 break;447 }448 },449 // Calculate the diff between the two objects.450 diffProperties(451 domElement: Element,452 tag: string,453 lastRawProps: Object,454 nextRawProps: Object,455 rootContainerElement: Element | Document,456 ): null | Array<mixed> {457 if (__DEV__) {458 validatePropertiesInDevelopment(tag, nextRawProps);459 }460 var updatePayload: null | Array<any> = null;461 var lastProps: Object;462 var nextProps: Object;463 switch (tag) {464 case 'input':465 lastProps = ReactDOMFiberInput.getHostProps(domElement, lastRawProps);466 nextProps = ReactDOMFiberInput.getHostProps(domElement, nextRawProps);467 updatePayload = [];468 break;469 case 'option':470 lastProps = ReactDOMFiberOption.getHostProps(domElement, lastRawProps);471 nextProps = ReactDOMFiberOption.getHostProps(domElement, nextRawProps);472 updatePayload = [];473 break;474 case 'select':475 lastProps = ReactDOMFiberSelect.getHostProps(domElement, lastRawProps);476 nextProps = ReactDOMFiberSelect.getHostProps(domElement, nextRawProps);477 updatePayload = [];478 break;479 case 'textarea':480 lastProps = ReactDOMFiberTextarea.getHostProps(481 domElement,482 lastRawProps,483 );484 nextProps = ReactDOMFiberTextarea.getHostProps(485 domElement,486 nextRawProps,487 );488 updatePayload = [];489 break;490 default:491 lastProps = lastRawProps;492 nextProps = nextRawProps;493 if (494 typeof lastProps.onClick !== 'function' &&495 typeof nextProps.onClick === 'function'496 ) {497 // TODO: This cast may not be sound for SVG, MathML or custom elements.498 trapClickOnNonInteractiveElement(((domElement: any): HTMLElement));499 }500 break;501 }502 assertValidProps(tag, nextProps, getCurrentFiberOwnerName);503 var propKey;504 var styleName;505 var styleUpdates = null;506 for (propKey in lastProps) {507 if (508 nextProps.hasOwnProperty(propKey) ||509 !lastProps.hasOwnProperty(propKey) ||510 lastProps[propKey] == null511 ) {512 continue;513 }514 if (propKey === STYLE) {515 var lastStyle = lastProps[propKey];516 for (styleName in lastStyle) {517 if (lastStyle.hasOwnProperty(styleName)) {518 if (!styleUpdates) {519 styleUpdates = {};520 }521 styleUpdates[styleName] = '';522 }523 }524 } else if (525 propKey === DANGEROUSLY_SET_INNER_HTML ||526 propKey === CHILDREN527 ) {528 // Noop. This is handled by the clear text mechanism.529 } else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING) {530 // Noop531 } else if (registrationNameModules.hasOwnProperty(propKey)) {532 // This is a special case. If any listener updates we need to ensure533 // that the "current" fiber pointer gets updated so we need a commit534 // to update this element.535 if (!updatePayload) {536 updatePayload = [];537 }538 } else {539 // For all other deleted properties we add it to the queue. We use540 // the whitelist in the commit phase instead.541 (updatePayload = updatePayload || []).push(propKey, null);542 }543 }544 for (propKey in nextProps) {545 var nextProp = nextProps[propKey];546 var lastProp = lastProps != null ? lastProps[propKey] : undefined;547 if (548 !nextProps.hasOwnProperty(propKey) ||549 nextProp === lastProp ||550 (nextProp == null && lastProp == null)551 ) {552 continue;553 }554 if (propKey === STYLE) {555 if (__DEV__) {556 if (nextProp) {557 // Freeze the next style object so that we can assume it won't be558 // mutated. We have already warned for this in the past.559 Object.freeze(nextProp);560 }561 }562 if (lastProp) {563 // Unset styles on `lastProp` but not on `nextProp`.564 for (styleName in lastProp) {565 if (566 lastProp.hasOwnProperty(styleName) &&567 (!nextProp || !nextProp.hasOwnProperty(styleName))568 ) {569 if (!styleUpdates) {570 styleUpdates = {};571 }572 styleUpdates[styleName] = '';573 }574 }575 // Update styles that changed since `lastProp`.576 for (styleName in nextProp) {577 if (578 nextProp.hasOwnProperty(styleName) &&579 lastProp[styleName] !== nextProp[styleName]580 ) {581 if (!styleUpdates) {582 styleUpdates = {};583 }584 styleUpdates[styleName] = nextProp[styleName];585 }586 }587 } else {588 // Relies on `updateStylesByID` not mutating `styleUpdates`.589 if (!styleUpdates) {590 if (!updatePayload) {591 updatePayload = [];592 }593 updatePayload.push(propKey, styleUpdates);594 }595 styleUpdates = nextProp;596 }597 } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {598 var nextHtml = nextProp ? nextProp[HTML] : undefined;599 var lastHtml = lastProp ? lastProp[HTML] : undefined;600 if (nextHtml != null) {601 if (lastHtml !== nextHtml) {602 (updatePayload = updatePayload || []).push(propKey, '' + nextHtml);603 }604 } else {605 // TODO: It might be too late to clear this if we have children606 // inserted already.607 }608 } else if (propKey === CHILDREN) {609 if (610 lastProp !== nextProp &&611 (typeof nextProp === 'string' || typeof nextProp === 'number')612 ) {613 (updatePayload = updatePayload || []).push(propKey, '' + nextProp);614 }615 } else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING) {616 // Noop617 } else if (registrationNameModules.hasOwnProperty(propKey)) {618 if (nextProp) {619 // We eagerly listen to this even though we haven't committed yet.620 ensureListeningTo(rootContainerElement, propKey);621 }622 if (!updatePayload && lastProp !== nextProp) {623 // This is a special case. If any listener updates we need to ensure624 // that the "current" props pointer gets updated so we need a commit625 // to update this element.626 updatePayload = [];627 }628 } else {629 // For any other property we always add it to the queue and then we630 // filter it out using the whitelist during the commit.631 (updatePayload = updatePayload || []).push(propKey, nextProp);632 }633 }634 if (styleUpdates) {635 (updatePayload = updatePayload || []).push(STYLE, styleUpdates);636 }637 return updatePayload;638 },639 // Apply the diff.640 updateProperties(641 domElement: Element,642 updatePayload: Array<any>,643 tag: string,644 lastRawProps: Object,645 nextRawProps: Object,646 ): void {647 var wasCustomComponentTag = isCustomComponent(tag, lastRawProps);648 var isCustomComponentTag = isCustomComponent(tag, nextRawProps);649 // Apply the diff.650 updateDOMProperties(651 domElement,652 updatePayload,653 wasCustomComponentTag,654 isCustomComponentTag,655 );656 // TODO: Ensure that an update gets scheduled if any of the special props657 // changed.658 switch (tag) {659 case 'input':660 // Update the wrapper around inputs *after* updating props. This has to661 // happen after `updateDOMProperties`. Otherwise HTML5 input validations662 // raise warnings and prevent the new value from being assigned.663 ReactDOMFiberInput.updateWrapper(domElement, nextRawProps);664 break;665 case 'textarea':666 ReactDOMFiberTextarea.updateWrapper(domElement, nextRawProps);667 break;668 case 'select':669 // <select> value update needs to occur after <option> children670 // reconciliation671 ReactDOMFiberSelect.postUpdateWrapper(domElement, nextRawProps);672 break;673 }674 },675 diffHydratedProperties(676 domElement: Element,677 tag: string,678 rawProps: Object,679 rootContainerElement: Element | Document,680 ): null | Array<mixed> {681 if (__DEV__) {682 var isCustomComponentTag = isCustomComponent(tag, rawProps);683 validatePropertiesInDevelopment(tag, rawProps);684 if (isCustomComponentTag && !didWarnShadyDOM && domElement.shadyRoot) {685 warning(686 false,687 '%s is using shady DOM. Using shady DOM with React can ' +688 'cause things to break subtly.',689 getCurrentFiberOwnerName() || 'A component',690 );691 didWarnShadyDOM = true;692 }693 }694 switch (tag) {695 case 'audio':696 case 'form':697 case 'iframe':698 case 'img':699 case 'image':700 case 'link':701 case 'object':702 case 'source':703 case 'video':704 case 'details':705 trapBubbledEventsLocal(domElement, tag);706 break;707 case 'input':708 ReactDOMFiberInput.initWrapperState(domElement, rawProps);709 trapBubbledEventsLocal(domElement, tag);710 // For controlled components we always need to ensure we're listening711 // to onChange. Even if there is no listener.712 ensureListeningTo(rootContainerElement, 'onChange');713 break;714 case 'option':715 ReactDOMFiberOption.validateProps(domElement, rawProps);716 break;717 case 'select':718 ReactDOMFiberSelect.initWrapperState(domElement, rawProps);719 trapBubbledEventsLocal(domElement, tag);720 // For controlled components we always need to ensure we're listening721 // to onChange. Even if there is no listener.722 ensureListeningTo(rootContainerElement, 'onChange');723 break;724 case 'textarea':725 ReactDOMFiberTextarea.initWrapperState(domElement, rawProps);726 trapBubbledEventsLocal(domElement, tag);727 // For controlled components we always need to ensure we're listening728 // to onChange. Even if there is no listener.729 ensureListeningTo(rootContainerElement, 'onChange');730 break;731 }732 assertValidProps(tag, rawProps, getCurrentFiberOwnerName);733 var updatePayload = null;734 for (var propKey in rawProps) {735 if (!rawProps.hasOwnProperty(propKey)) {736 continue;737 }738 var nextProp = rawProps[propKey];739 if (propKey === CHILDREN) {740 // For text content children we compare against textContent. This741 // might match additional HTML that is hidden when we read it using742 // textContent. E.g. "foo" will match "f<span>oo</span>" but that still743 // satisfies our requirement. Our requirement is not to produce perfect744 // HTML and attributes. Ideally we should preserve structure but it's745 // ok not to if the visible content is still enough to indicate what746 // even listeners these nodes might be wired up to.747 // TODO: Warn if there is more than a single textNode as a child.748 // TODO: Should we use domElement.firstChild.nodeValue to compare?749 if (typeof nextProp === 'string') {750 if (domElement.textContent !== nextProp) {751 updatePayload = [CHILDREN, nextProp];752 }753 } else if (typeof nextProp === 'number') {754 if (domElement.textContent !== '' + nextProp) {755 updatePayload = [CHILDREN, '' + nextProp];756 }757 }758 } else if (registrationNameModules.hasOwnProperty(propKey)) {759 if (nextProp) {760 ensureListeningTo(rootContainerElement, propKey);761 }762 }763 }764 switch (tag) {765 case 'input':766 // TODO: Make sure we check if this is still unmounted or do any clean767 // up necessary since we never stop tracking anymore.768 inputValueTracking.trackNode((domElement: any));769 ReactDOMFiberInput.postMountWrapper(domElement, rawProps);770 break;771 case 'textarea':772 // TODO: Make sure we check if this is still unmounted or do any clean773 // up necessary since we never stop tracking anymore.774 inputValueTracking.trackNode((domElement: any));...
Using AI Code Generation
1const { ensureListeningTo } = require('playwright/lib/server/browserType');2const { chromium } = require('playwright');3(async () => {4 const browser = await chromium.launch();5 ensureListeningTo(browser);6})();
Using AI Code Generation
1const { chromium } = require('playwright');2const { ensureListeningTo } = require('playwright/lib/server/browserServer');3(async () => {4 const browser = await chromium.launch();5 const browserServer = await browser.server();6 await ensureListeningTo(browserServer, 1000);7 console.log('Listening on port 1000');8})();9const { chromium } = require('playwright');10module.exports = {11 webServer: {12 },13 use: {14 launchOptions: {15 },16 },17};18const { chromium } = require('playwright');19module.exports = {20 webServer: {21 },22 use: {23 launchOptions: {24 },25 },26};
Using AI Code Generation
1const playwright = require('playwright');2const { ensureListeningTo } = require('playwright/lib/server/browserServer');3const browser = await playwright.chromium.launch();4const server = await browser.newContext().newPage().server();5await ensureListeningTo(server, 'request');6server.on('request', request => {7 console.log(request.url());8});9await browser.close();10const playwright = require('playwright');11const { ensureListeningTo } = require('playwright/lib/server/browserServer');12const browser = await playwright.chromium.launch();13const server = await browser.newContext().newPage().server();14await ensureListeningTo(server, 'request');15server.on('request', request => {16 console.log(request.url());17});18await browser.close();19const playwright = require('playwright');20const { ensureListeningTo } = require('playwright/lib/server/browserServer');21const browser = await playwright.chromium.launch();22const server = await browser.newContext().newPage().server();23await ensureListeningTo(server, 'request');24server.on('request', request => {25 console.log(request.url());26});27await browser.close();28const playwright = require('playwright');29const { ensureListeningTo } = require('playwright/lib/server/browserServer');30const browser = await playwright.chromium.launch();31const server = await browser.newContext().newPage().server();32await ensureListeningTo(server, 'request');33server.on('request', request => {34 console.log(request.url());35});36await browser.close();37const playwright = require('playwright');38const { ensureListeningTo } = require('playwright/lib/server/browserServer');39const browser = await playwright.chromium.launch();40const server = await browser.newContext().newPage().server();41await ensureListeningTo(server, 'request');42server.on('request', request => {43 console.log(request.url());44});45await browser.close();46const playwright = require('playwright');47const { ensureListeningTo } = require('playwright/lib/server/browserServer');48const browser = await playwright.chromium.launch();49const server = await browser.newContext().newPage().server();50await ensureListeningTo(server, 'request');
Using AI Code Generation
1const playwright = require('playwright');2const internalAPI = require('playwright/lib/server/playwright');3const { ensureListeningTo } = internalAPI;4(async () => {5 const browser = await playwright.firefox.launch();6 const page = await browser.newPage();7 await page.screenshot({ path: 'example.png' });8 await browser.close();9})();
Using AI Code Generation
1const { ensureListeningTo } = require('playwright/lib/server/webkit');2await ensureListeningTo(8080);3const browser = await webkit.launch({ headless: false, args: ['--remote-debugging-port=8080'] });4const context = await browser.newContext();5const page = await context.newPage();6[ERROR:network_service_instance_impl.cc(175)] Failed to listen on
Using AI Code Generation
1const {ensureListeningTo} = require('playwright/lib/server/network');2ensureListeningTo(1234);3const {ensureListeningTo} = require('playwright/lib/server/network');4ensureListeningTo(1234);5const {ensureListeningTo} = require('playwright/lib/server/network');6ensureListeningTo(1234);7const {ensureListeningTo} = require('playwright/lib/server/network');8ensureListeningTo(1234);9const {ensureListeningTo} = require('playwright/lib/server/network');10ensureListeningTo(1234);11const {ensureListeningTo} = require('playwright/lib/server/network');12ensureListeningTo(1234);13const {ensureListeningTo} = require('playwright/lib/server/network');14ensureListeningTo(1234);15const {ensureListeningTo} = require('playwright/lib/server/network');16ensureListeningTo(1234);17const {ensureListeningTo} = require('playwright/lib/server/network');18ensureListeningTo(1234);19const {ensureListeningTo} = require('play
LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!