Best JavaScript code snippet using playwright-internal
vue3.js
Source:vue3.js
...1988 return [vnode, undefined];1989 }1990 const rawChildren = vnode.children;1991 const dynamicChildren = vnode.dynamicChildren;1992 const childRoot = filterSingleRoot(rawChildren);1993 if (!childRoot) {1994 return [vnode, undefined];1995 }1996 const index = rawChildren.indexOf(childRoot);1997 const dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1;1998 const setRoot = (updatedRoot) => {1999 rawChildren[index] = updatedRoot;2000 if (dynamicChildren) {2001 if (dynamicIndex > -1) {2002 dynamicChildren[dynamicIndex] = updatedRoot;2003 }2004 else if (updatedRoot.patchFlag > 0) {2005 vnode.dynamicChildren = [...dynamicChildren, updatedRoot];2006 }2007 }2008 };2009 return [normalizeVNode(childRoot), setRoot];2010 };2011 /**2012 * dev only2013 */2014 function filterSingleRoot(children) {2015 const filtered = children.filter(child => {2016 return !(isVNode(child) &&2017 child.type === Comment &&2018 child.children !== 'v-if');2019 });2020 return filtered.length === 1 && isVNode(filtered[0]) ? filtered[0] : null;2021 }2022 const getFunctionalFallthrough = (attrs) => {2023 let res;2024 for (const key in attrs) {2025 if (key === 'class' || key === 'style' || isOn(key)) {2026 (res || (res = {}))[key] = attrs[key];2027 }2028 }2029 return res;2030 };2031 const filterModelListeners = (attrs, props) => {2032 const res = {};2033 for (const key in attrs) {2034 if (!isModelListener(key) || !(key.slice(9) in props)) {2035 res[key] = attrs[key];2036 }2037 }2038 return res;2039 };2040 const isElementRoot = (vnode) => {2041 return (vnode.shapeFlag & 6 /* COMPONENT */ ||2042 vnode.shapeFlag & 1 /* ELEMENT */ ||2043 vnode.type === Comment // potential v-if branch switch2044 );2045 };2046 function shouldUpdateComponent(prevVNode, nextVNode, optimized) {2047 const { props: prevProps, children: prevChildren, component } = prevVNode;2048 const { props: nextProps, children: nextChildren, patchFlag } = nextVNode;2049 const emits = component.emitsOptions;2050 // Parent component's render function was hot-updated. Since this may have2051 // caused the child component's slots content to have changed, we need to2052 // force the child to update as well.2053 if ( (prevChildren || nextChildren) && isHmrUpdating) {2054 return true;2055 }2056 // force child update for runtime directive or transition on component vnode.2057 if (nextVNode.dirs || nextVNode.transition) {2058 return true;2059 }2060 if (optimized && patchFlag > 0) {2061 if (patchFlag & 1024 /* DYNAMIC_SLOTS */) {2062 // slot content that references values that might have changed,2063 // e.g. in a v-for2064 return true;2065 }2066 if (patchFlag & 16 /* FULL_PROPS */) {2067 if (!prevProps) {2068 return !!nextProps;2069 }2070 // presence of this flag indicates props are always non-null2071 return hasPropsChanged(prevProps, nextProps, emits);2072 }2073 else if (patchFlag & 8 /* PROPS */) {2074 const dynamicProps = nextVNode.dynamicProps;2075 for (let i = 0; i < dynamicProps.length; i++) {2076 const key = dynamicProps[i];2077 if (nextProps[key] !== prevProps[key] &&2078 !isEmitListener(emits, key)) {2079 return true;2080 }2081 }2082 }2083 }2084 else {2085 // this path is only taken by manually written render functions2086 // so presence of any children leads to a forced update2087 if (prevChildren || nextChildren) {2088 if (!nextChildren || !nextChildren.$stable) {2089 return true;2090 }2091 }2092 if (prevProps === nextProps) {2093 return false;2094 }2095 if (!prevProps) {2096 return !!nextProps;2097 }2098 if (!nextProps) {2099 return true;2100 }2101 return hasPropsChanged(prevProps, nextProps, emits);2102 }2103 return false;2104 }2105 function hasPropsChanged(prevProps, nextProps, emitsOptions) {2106 const nextKeys = Object.keys(nextProps);2107 if (nextKeys.length !== Object.keys(prevProps).length) {2108 return true;2109 }2110 for (let i = 0; i < nextKeys.length; i++) {2111 const key = nextKeys[i];2112 if (nextProps[key] !== prevProps[key] &&2113 !isEmitListener(emitsOptions, key)) {2114 return true;2115 }2116 }2117 return false;2118 }2119 function updateHOCHostEl({ vnode, parent }, el // HostNode2120 ) {2121 while (parent && parent.subTree === vnode) {2122 (vnode = parent.vnode).el = el;2123 parent = parent.parent;2124 }2125 }2126 const isSuspense = (type) => type.__isSuspense;2127 // Suspense exposes a component-like API, and is treated like a component2128 // in the compiler, but internally it's a special built-in type that hooks2129 // directly into the renderer.2130 const SuspenseImpl = {2131 // In order to make Suspense tree-shakable, we need to avoid importing it2132 // directly in the renderer. The renderer checks for the __isSuspense flag2133 // on a vnode's type and calls the `process` method, passing in renderer2134 // internals.2135 __isSuspense: true,2136 process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, optimized, 2137 // platform-specific impl passed from renderer2138 rendererInternals) {2139 if (n1 == null) {2140 mountSuspense(n2, container, anchor, parentComponent, parentSuspense, isSVG, optimized, rendererInternals);2141 }2142 else {2143 patchSuspense(n1, n2, container, anchor, parentComponent, isSVG, rendererInternals);2144 }2145 },2146 hydrate: hydrateSuspense,2147 create: createSuspenseBoundary2148 };2149 // Force-casted public typing for h and TSX props inference2150 const Suspense = ( SuspenseImpl2151 );2152 function mountSuspense(vnode, container, anchor, parentComponent, parentSuspense, isSVG, optimized, rendererInternals) {2153 const { p: patch, o: { createElement } } = rendererInternals;2154 const hiddenContainer = createElement('div');2155 const suspense = (vnode.suspense = createSuspenseBoundary(vnode, parentSuspense, parentComponent, container, hiddenContainer, anchor, isSVG, optimized, rendererInternals));2156 // start mounting the content subtree in an off-dom container2157 patch(null, (suspense.pendingBranch = vnode.ssContent), hiddenContainer, null, parentComponent, suspense, isSVG);2158 // now check if we have encountered any async deps2159 if (suspense.deps > 0) {2160 // has async2161 // mount the fallback tree2162 patch(null, vnode.ssFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context2163 isSVG);2164 setActiveBranch(suspense, vnode.ssFallback);2165 }2166 else {2167 // Suspense has no async deps. Just resolve.2168 suspense.resolve();2169 }2170 }2171 function patchSuspense(n1, n2, container, anchor, parentComponent, isSVG, { p: patch, um: unmount, o: { createElement } }) {2172 const suspense = (n2.suspense = n1.suspense);2173 suspense.vnode = n2;2174 n2.el = n1.el;2175 const newBranch = n2.ssContent;2176 const newFallback = n2.ssFallback;2177 const { activeBranch, pendingBranch, isInFallback, isHydrating } = suspense;2178 if (pendingBranch) {2179 suspense.pendingBranch = newBranch;2180 if (isSameVNodeType(newBranch, pendingBranch)) {2181 // same root type but content may have changed.2182 patch(pendingBranch, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG);2183 if (suspense.deps <= 0) {2184 suspense.resolve();2185 }2186 else if (isInFallback) {2187 patch(activeBranch, newFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context2188 isSVG);2189 setActiveBranch(suspense, newFallback);2190 }2191 }2192 else {2193 // toggled before pending tree is resolved2194 suspense.pendingId++;2195 if (isHydrating) {2196 // if toggled before hydration is finished, the current DOM tree is2197 // no longer valid. set it as the active branch so it will be unmounted2198 // when resolved2199 suspense.isHydrating = false;2200 suspense.activeBranch = pendingBranch;2201 }2202 else {2203 unmount(pendingBranch, parentComponent, suspense);2204 }2205 // increment pending ID. this is used to invalidate async callbacks2206 // reset suspense state2207 suspense.deps = 0;2208 // discard effects from pending branch2209 suspense.effects.length = 0;2210 // discard previous container2211 suspense.hiddenContainer = createElement('div');2212 if (isInFallback) {2213 // already in fallback state2214 patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG);2215 if (suspense.deps <= 0) {2216 suspense.resolve();2217 }2218 else {2219 patch(activeBranch, newFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context2220 isSVG);2221 setActiveBranch(suspense, newFallback);2222 }2223 }2224 else if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {2225 // toggled "back" to current active branch2226 patch(activeBranch, newBranch, container, anchor, parentComponent, suspense, isSVG);2227 // force resolve2228 suspense.resolve(true);2229 }2230 else {2231 // switched to a 3rd branch2232 patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG);2233 if (suspense.deps <= 0) {2234 suspense.resolve();2235 }2236 }2237 }2238 }2239 else {2240 if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {2241 // root did not change, just normal patch2242 patch(activeBranch, newBranch, container, anchor, parentComponent, suspense, isSVG);2243 setActiveBranch(suspense, newBranch);2244 }2245 else {2246 // root node toggled2247 // invoke @pending event2248 const onPending = n2.props && n2.props.onPending;2249 if (isFunction(onPending)) {2250 onPending();2251 }2252 // mount pending branch in off-dom container2253 suspense.pendingBranch = newBranch;2254 suspense.pendingId++;2255 patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG);2256 if (suspense.deps <= 0) {2257 // incoming branch has no async deps, resolve now.2258 suspense.resolve();2259 }2260 else {2261 const { timeout, pendingId } = suspense;2262 if (timeout > 0) {2263 setTimeout(() => {2264 if (suspense.pendingId === pendingId) {2265 suspense.fallback(newFallback);2266 }2267 }, timeout);2268 }2269 else if (timeout === 0) {2270 suspense.fallback(newFallback);2271 }2272 }2273 }2274 }2275 }2276 let hasWarned = false;2277 function createSuspenseBoundary(vnode, parent, parentComponent, container, hiddenContainer, anchor, isSVG, optimized, rendererInternals, isHydrating = false) {2278 /* istanbul ignore if */2279 if ( !hasWarned) {2280 hasWarned = true;2281 // @ts-ignore `console.info` cannot be null error2282 console[console.info ? 'info' : 'log'](`<Suspense> is an experimental feature and its API will likely change.`);2283 }2284 const { p: patch, m: move, um: unmount, n: next, o: { parentNode, remove } } = rendererInternals;2285 const timeout = toNumber(vnode.props && vnode.props.timeout);2286 const suspense = {2287 vnode,2288 parent,2289 parentComponent,2290 isSVG,2291 container,2292 hiddenContainer,2293 anchor,2294 deps: 0,2295 pendingId: 0,2296 timeout: typeof timeout === 'number' ? timeout : -1,2297 activeBranch: null,2298 pendingBranch: null,2299 isInFallback: true,2300 isHydrating,2301 isUnmounted: false,2302 effects: [],2303 resolve(resume = false) {2304 {2305 if (!resume && !suspense.pendingBranch) {2306 throw new Error(`suspense.resolve() is called without a pending branch.`);2307 }2308 if (suspense.isUnmounted) {2309 throw new Error(`suspense.resolve() is called on an already unmounted suspense boundary.`);2310 }2311 }2312 const { vnode, activeBranch, pendingBranch, pendingId, effects, parentComponent, container } = suspense;2313 if (suspense.isHydrating) {2314 suspense.isHydrating = false;2315 }2316 else if (!resume) {2317 const delayEnter = activeBranch &&2318 pendingBranch.transition &&2319 pendingBranch.transition.mode === 'out-in';2320 if (delayEnter) {2321 activeBranch.transition.afterLeave = () => {2322 if (pendingId === suspense.pendingId) {2323 move(pendingBranch, container, anchor, 0 /* ENTER */);2324 }2325 };2326 }2327 // this is initial anchor on mount2328 let { anchor } = suspense;2329 // unmount current active tree2330 if (activeBranch) {2331 // if the fallback tree was mounted, it may have been moved2332 // as part of a parent suspense. get the latest anchor for insertion2333 anchor = next(activeBranch);2334 unmount(activeBranch, parentComponent, suspense, true);2335 }2336 if (!delayEnter) {2337 // move content from off-dom container to actual container2338 move(pendingBranch, container, anchor, 0 /* ENTER */);2339 }2340 }2341 setActiveBranch(suspense, pendingBranch);2342 suspense.pendingBranch = null;2343 suspense.isInFallback = false;2344 // flush buffered effects2345 // check if there is a pending parent suspense2346 let parent = suspense.parent;2347 let hasUnresolvedAncestor = false;2348 while (parent) {2349 if (parent.pendingBranch) {2350 // found a pending parent suspense, merge buffered post jobs2351 // into that parent2352 parent.effects.push(...effects);2353 hasUnresolvedAncestor = true;2354 break;2355 }2356 parent = parent.parent;2357 }2358 // no pending parent suspense, flush all jobs2359 if (!hasUnresolvedAncestor) {2360 queuePostFlushCb(effects);2361 }2362 suspense.effects = [];2363 // invoke @resolve event2364 const onResolve = vnode.props && vnode.props.onResolve;2365 if (isFunction(onResolve)) {2366 onResolve();2367 }2368 },2369 fallback(fallbackVNode) {2370 if (!suspense.pendingBranch) {2371 return;2372 }2373 const { vnode, activeBranch, parentComponent, container, isSVG } = suspense;2374 // invoke @fallback event2375 const onFallback = vnode.props && vnode.props.onFallback;2376 if (isFunction(onFallback)) {2377 onFallback();2378 }2379 const anchor = next(activeBranch);2380 const mountFallback = () => {2381 if (!suspense.isInFallback) {2382 return;2383 }2384 // mount the fallback tree2385 patch(null, fallbackVNode, container, anchor, parentComponent, null, // fallback tree will not have suspense context2386 isSVG);2387 setActiveBranch(suspense, fallbackVNode);2388 };2389 const delayEnter = fallbackVNode.transition && fallbackVNode.transition.mode === 'out-in';2390 if (delayEnter) {2391 activeBranch.transition.afterLeave = mountFallback;2392 }2393 // unmount current active branch2394 unmount(activeBranch, parentComponent, null, // no suspense so unmount hooks fire now2395 true // shouldRemove2396 );2397 suspense.isInFallback = true;2398 if (!delayEnter) {2399 mountFallback();2400 }2401 },2402 move(container, anchor, type) {2403 suspense.activeBranch &&2404 move(suspense.activeBranch, container, anchor, type);2405 suspense.container = container;2406 },2407 next() {2408 return suspense.activeBranch && next(suspense.activeBranch);2409 },2410 registerDep(instance, setupRenderEffect) {2411 if (!suspense.pendingBranch) {2412 return;2413 }2414 const hydratedEl = instance.vnode.el;2415 suspense.deps++;2416 instance2417 .asyncDep.catch(err => {2418 handleError(err, instance, 0 /* SETUP_FUNCTION */);2419 })2420 .then(asyncSetupResult => {2421 // retry when the setup() promise resolves.2422 // component may have been unmounted before resolve.2423 if (instance.isUnmounted ||2424 suspense.isUnmounted ||2425 suspense.pendingId !== instance.suspenseId) {2426 return;2427 }2428 suspense.deps--;2429 // retry from this component2430 instance.asyncResolved = true;2431 const { vnode } = instance;2432 {2433 pushWarningContext(vnode);2434 }2435 handleSetupResult(instance, asyncSetupResult);2436 if (hydratedEl) {2437 // vnode may have been replaced if an update happened before the2438 // async dep is resolved.2439 vnode.el = hydratedEl;2440 }2441 const placeholder = !hydratedEl && instance.subTree.el;2442 setupRenderEffect(instance, vnode, 2443 // component may have been moved before resolve.2444 // if this is not a hydration, instance.subTree will be the comment2445 // placeholder.2446 parentNode(hydratedEl || instance.subTree.el), 2447 // anchor will not be used if this is hydration, so only need to2448 // consider the comment placeholder case.2449 hydratedEl ? null : next(instance.subTree), suspense, isSVG, optimized);2450 if (placeholder) {2451 remove(placeholder);2452 }2453 updateHOCHostEl(instance, vnode.el);2454 {2455 popWarningContext();2456 }2457 if (suspense.deps === 0) {2458 suspense.resolve();2459 }2460 });2461 },2462 unmount(parentSuspense, doRemove) {2463 suspense.isUnmounted = true;2464 if (suspense.activeBranch) {2465 unmount(suspense.activeBranch, parentComponent, parentSuspense, doRemove);2466 }2467 if (suspense.pendingBranch) {2468 unmount(suspense.pendingBranch, parentComponent, parentSuspense, doRemove);2469 }2470 }2471 };2472 return suspense;2473 }2474 function hydrateSuspense(node, vnode, parentComponent, parentSuspense, isSVG, optimized, rendererInternals, hydrateNode) {2475 /* eslint-disable no-restricted-globals */2476 const suspense = (vnode.suspense = createSuspenseBoundary(vnode, parentSuspense, parentComponent, node.parentNode, document.createElement('div'), null, isSVG, optimized, rendererInternals, true /* hydrating */));2477 // there are two possible scenarios for server-rendered suspense:2478 // - success: ssr content should be fully resolved2479 // - failure: ssr content should be the fallback branch.2480 // however, on the client we don't really know if it has failed or not2481 // attempt to hydrate the DOM assuming it has succeeded, but we still2482 // need to construct a suspense boundary first2483 const result = hydrateNode(node, (suspense.pendingBranch = vnode.ssContent), parentComponent, suspense, optimized);2484 if (suspense.deps === 0) {2485 suspense.resolve();2486 }2487 return result;2488 /* eslint-enable no-restricted-globals */2489 }2490 function normalizeSuspenseChildren(vnode) {2491 const { shapeFlag, children } = vnode;2492 let content;2493 let fallback;2494 if (shapeFlag & 32 /* SLOTS_CHILDREN */) {2495 content = normalizeSuspenseSlot(children.default);2496 fallback = normalizeSuspenseSlot(children.fallback);2497 }2498 else {2499 content = normalizeSuspenseSlot(children);2500 fallback = normalizeVNode(null);2501 }2502 return {2503 content,2504 fallback2505 };2506 }2507 function normalizeSuspenseSlot(s) {2508 if (isFunction(s)) {2509 s = s();2510 }2511 if (isArray(s)) {2512 const singleChild = filterSingleRoot(s);2513 if ( !singleChild) {2514 warn(`<Suspense> slots expect a single root node.`);2515 }2516 s = singleChild;2517 }2518 return normalizeVNode(s);2519 }2520 function queueEffectWithSuspense(fn, suspense) {2521 if (suspense && suspense.pendingBranch) {2522 if (isArray(fn)) {2523 suspense.effects.push(...fn);2524 }2525 else {2526 suspense.effects.push(fn);
...
index.147aad71.js
Source:index.147aad71.js
...1141 return [vnode, void 0];1142 }1143 const rawChildren = vnode.children;1144 const dynamicChildren = vnode.dynamicChildren;1145 const childRoot = filterSingleRoot(rawChildren);1146 if (!childRoot) {1147 return [vnode, void 0];1148 }1149 const index = rawChildren.indexOf(childRoot);1150 const dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1;1151 const setRoot = (updatedRoot) => {1152 rawChildren[index] = updatedRoot;1153 if (dynamicChildren) {1154 if (dynamicIndex > -1) {1155 dynamicChildren[dynamicIndex] = updatedRoot;1156 } else if (updatedRoot.patchFlag > 0) {1157 vnode.dynamicChildren = [...dynamicChildren, updatedRoot];1158 }1159 }1160 };1161 return [normalizeVNode(childRoot), setRoot];1162};1163function filterSingleRoot(children) {1164 const filtered = children.filter((child) => {1165 return !(isVNode(child) && child.type === Comment && child.children !== "v-if");1166 });1167 return filtered.length === 1 && isVNode(filtered[0]) ? filtered[0] : null;1168}1169const getFunctionalFallthrough = (attrs) => {1170 let res;1171 for (const key in attrs) {1172 if (key === "class" || key === "style" || isOn(key)) {1173 (res || (res = {}))[key] = attrs[key];1174 }1175 }1176 return res;1177};1178const filterModelListeners = (attrs, props) => {1179 const res = {};1180 for (const key in attrs) {1181 if (!isModelListener(key) || !(key.slice(9) in props)) {1182 res[key] = attrs[key];1183 }1184 }1185 return res;1186};1187const isElementRoot = (vnode) => {1188 return vnode.shapeFlag & 6 || vnode.shapeFlag & 1 || vnode.type === Comment;1189};1190function shouldUpdateComponent(prevVNode, nextVNode, optimized) {1191 const {props: prevProps, children: prevChildren, component} = prevVNode;1192 const {props: nextProps, children: nextChildren, patchFlag} = nextVNode;1193 const emits = component.emitsOptions;1194 if (nextVNode.dirs || nextVNode.transition) {1195 return true;1196 }1197 if (optimized && patchFlag > 0) {1198 if (patchFlag & 1024) {1199 return true;1200 }1201 if (patchFlag & 16) {1202 if (!prevProps) {1203 return !!nextProps;1204 }1205 return hasPropsChanged(prevProps, nextProps, emits);1206 } else if (patchFlag & 8) {1207 const dynamicProps = nextVNode.dynamicProps;1208 for (let i = 0; i < dynamicProps.length; i++) {1209 const key = dynamicProps[i];1210 if (nextProps[key] !== prevProps[key] && !isEmitListener(emits, key)) {1211 return true;1212 }1213 }1214 }1215 } else {1216 if (prevChildren || nextChildren) {1217 if (!nextChildren || !nextChildren.$stable) {1218 return true;1219 }1220 }1221 if (prevProps === nextProps) {1222 return false;1223 }1224 if (!prevProps) {1225 return !!nextProps;1226 }1227 if (!nextProps) {1228 return true;1229 }1230 return hasPropsChanged(prevProps, nextProps, emits);1231 }1232 return false;1233}1234function hasPropsChanged(prevProps, nextProps, emitsOptions) {1235 const nextKeys = Object.keys(nextProps);1236 if (nextKeys.length !== Object.keys(prevProps).length) {1237 return true;1238 }1239 for (let i = 0; i < nextKeys.length; i++) {1240 const key = nextKeys[i];1241 if (nextProps[key] !== prevProps[key] && !isEmitListener(emitsOptions, key)) {1242 return true;1243 }1244 }1245 return false;1246}1247function updateHOCHostEl({vnode, parent}, el) {1248 while (parent && parent.subTree === vnode) {1249 (vnode = parent.vnode).el = el;1250 parent = parent.parent;1251 }1252}1253const isSuspense = (type) => type.__isSuspense;1254function normalizeSuspenseChildren(vnode) {1255 const {shapeFlag, children} = vnode;1256 let content;1257 let fallback;1258 if (shapeFlag & 32) {1259 content = normalizeSuspenseSlot(children.default);1260 fallback = normalizeSuspenseSlot(children.fallback);1261 } else {1262 content = normalizeSuspenseSlot(children);1263 fallback = normalizeVNode(null);1264 }1265 return {1266 content,1267 fallback1268 };1269}1270function normalizeSuspenseSlot(s) {1271 if (isFunction(s)) {1272 s = s();1273 }1274 if (isArray(s)) {1275 const singleChild = filterSingleRoot(s);1276 s = singleChild;1277 }1278 return normalizeVNode(s);1279}1280function queueEffectWithSuspense(fn, suspense) {1281 if (suspense && suspense.pendingBranch) {1282 if (isArray(fn)) {1283 suspense.effects.push(...fn);1284 } else {1285 suspense.effects.push(fn);1286 }1287 } else {1288 queuePostFlushCb(fn);1289 }...
index.esm.js
Source:index.esm.js
...1372 */1373let currentRenderingInstance = null;1374function markAttrsAccessed() {1375}1376function filterSingleRoot(children) {1377 let singleRoot;1378 for (let i = 0; i < children.length; i++) {1379 const child = children[i];1380 if (isVNode(child)) {1381 // ignore user comment1382 if (child.type !== Comment || child.children === 'v-if') {1383 if (singleRoot) {1384 // has more than 1 non-comment child, return now1385 return;1386 }1387 else {1388 singleRoot = child;1389 }1390 }1391 }1392 else {1393 return;1394 }1395 }1396 return singleRoot;1397}1398const isSuspense = (type) => type.__isSuspense;1399function normalizeSuspenseChildren(vnode) {1400 const { shapeFlag, children } = vnode;1401 let content;1402 let fallback;1403 if (shapeFlag & 32 /* SLOTS_CHILDREN */) {1404 content = normalizeSuspenseSlot(children.default);1405 fallback = normalizeSuspenseSlot(children.fallback);1406 }1407 else {1408 content = normalizeSuspenseSlot(children);1409 fallback = normalizeVNode(null);1410 }1411 return {1412 content,1413 fallback1414 };1415}1416function normalizeSuspenseSlot(s) {1417 if (isFunction(s)) {1418 s = s();1419 }1420 if (isArray(s)) {1421 const singleChild = filterSingleRoot(s);1422 if ((process.env.NODE_ENV !== 'production') && !singleChild) {1423 warn(`<Suspense> slots expect a single root node.`);1424 }1425 s = singleChild;1426 }1427 return normalizeVNode(s);1428}1429function queueEffectWithSuspense(fn, suspense) {1430 if (suspense && suspense.pendingBranch) {1431 if (isArray(fn)) {1432 suspense.effects.push(...fn);1433 }1434 else {1435 suspense.effects.push(fn);...
Tabs.js
Source:Tabs.js
...1398 currentRenderingInstance = instance;1399}1400function markAttrsAccessed() {1401}1402function filterSingleRoot(children) {1403 let singleRoot;1404 for (let i = 0; i < children.length; i++) {1405 const child = children[i];1406 if (isVNode(child)) {1407 // ignore user comment1408 if (child.type !== Comment || child.children === 'v-if') {1409 if (singleRoot) {1410 // has more than 1 non-comment child, return now1411 return;1412 }1413 else {1414 singleRoot = child;1415 }1416 }1417 }1418 else {1419 return;1420 }1421 }1422 return singleRoot;1423}1424const isSuspense = (type) => type.__isSuspense;1425function normalizeSuspenseChildren(vnode) {1426 const { shapeFlag, children } = vnode;1427 let content;1428 let fallback;1429 if (shapeFlag & 32 /* SLOTS_CHILDREN */) {1430 content = normalizeSuspenseSlot(children.default);1431 fallback = normalizeSuspenseSlot(children.fallback);1432 }1433 else {1434 content = normalizeSuspenseSlot(children);1435 fallback = normalizeVNode(null);1436 }1437 return {1438 content,1439 fallback1440 };1441}1442function normalizeSuspenseSlot(s) {1443 if (isFunction(s)) {1444 s = s();1445 }1446 if (isArray(s)) {1447 const singleChild = filterSingleRoot(s);1448 if ((process.env.NODE_ENV !== 'production') && !singleChild) {1449 warn(`<Suspense> slots expect a single root node.`);1450 }1451 s = singleChild;1452 }1453 return normalizeVNode(s);1454}1455function queueEffectWithSuspense(fn, suspense) {1456 if (suspense && suspense.pendingBranch) {1457 if (isArray(fn)) {1458 suspense.effects.push(...fn);1459 }1460 else {1461 suspense.effects.push(fn);...
Icon.js
Source:Icon.js
...1373 currentRenderingInstance = instance;1374}1375function markAttrsAccessed() {1376}1377function filterSingleRoot(children) {1378 let singleRoot;1379 for (let i = 0; i < children.length; i++) {1380 const child = children[i];1381 if (isVNode(child)) {1382 // ignore user comment1383 if (child.type !== Comment || child.children === 'v-if') {1384 if (singleRoot) {1385 // has more than 1 non-comment child, return now1386 return;1387 }1388 else {1389 singleRoot = child;1390 }1391 }1392 }1393 else {1394 return;1395 }1396 }1397 return singleRoot;1398}1399const isSuspense = (type) => type.__isSuspense;1400function normalizeSuspenseChildren(vnode) {1401 const { shapeFlag, children } = vnode;1402 let content;1403 let fallback;1404 if (shapeFlag & 32 /* SLOTS_CHILDREN */) {1405 content = normalizeSuspenseSlot(children.default);1406 fallback = normalizeSuspenseSlot(children.fallback);1407 }1408 else {1409 content = normalizeSuspenseSlot(children);1410 fallback = normalizeVNode(null);1411 }1412 return {1413 content,1414 fallback1415 };1416}1417function normalizeSuspenseSlot(s) {1418 if (isFunction(s)) {1419 s = s();1420 }1421 if (isArray(s)) {1422 const singleChild = filterSingleRoot(s);1423 if ((process.env.NODE_ENV !== 'production') && !singleChild) {1424 warn(`<Suspense> slots expect a single root node.`);1425 }1426 s = singleChild;1427 }1428 return normalizeVNode(s);1429}1430function queueEffectWithSuspense(fn, suspense) {1431 if (suspense && suspense.pendingBranch) {1432 if (isArray(fn)) {1433 suspense.effects.push(...fn);1434 }1435 else {1436 suspense.effects.push(fn);...
browser.js
Source:browser.js
...1004 * resolveComponent, resolveDirective) during render1005 */1006 let currentRenderingInstance = null;1007 let currentScopeId = null;1008 function filterSingleRoot(children) {1009 let singleRoot;1010 for (let i = 0; i < children.length; i++) {1011 const child = children[i];1012 if (isVNode(child)) {1013 // ignore user comment1014 if (child.type !== Comment || child.children === 'v-if') {1015 if (singleRoot) {1016 // has more than 1 non-comment child, return now1017 return;1018 }1019 else {1020 singleRoot = child;1021 }1022 }1023 }1024 else {1025 return;1026 }1027 }1028 return singleRoot;1029 }1030 const isSuspense = (type) => type.__isSuspense;1031 function normalizeSuspenseChildren(vnode) {1032 const { shapeFlag, children } = vnode;1033 let content;1034 let fallback;1035 if (shapeFlag & 32 /* SLOTS_CHILDREN */) {1036 content = normalizeSuspenseSlot(children.default);1037 fallback = normalizeSuspenseSlot(children.fallback);1038 }1039 else {1040 content = normalizeSuspenseSlot(children);1041 fallback = normalizeVNode(null);1042 }1043 return {1044 content,1045 fallback1046 };1047 }1048 function normalizeSuspenseSlot(s) {1049 if (isFunction(s)) {1050 s = s();1051 }1052 if (isArray(s)) {1053 const singleChild = filterSingleRoot(s);1054 s = singleChild;1055 }1056 return normalizeVNode(s);1057 }1058 function queueEffectWithSuspense(fn, suspense) {1059 if (suspense && suspense.pendingBranch) {1060 if (isArray(fn)) {1061 suspense.effects.push(...fn);1062 }1063 else {1064 suspense.effects.push(fn);1065 }1066 }1067 else {
...
note-generate-code.js
Source:note-generate-code.js
...755 if (isFunction(s)) {756 s = s();757 }758 if (isArray(s)) {759 const singleChild = filterSingleRoot(s);760 if ( !singleChild) {761 warn(`<Suspense> slots expect a single root node.`);762 }763 s = singleChild;764 }765 return normalizeVNode(s);766 }767 function filterSingleRoot(children) {768 const filtered = children.filter(child => {769 return !(isVNode(child) &&770 child.type === Comment &&771 child.children !== 'v-if');772 });773 return filtered.length === 1 && isVNode(filtered[0]) ? filtered[0] : null;774 }775 function genNodeList(nodes, context, multilines = false, comma = true) {776 const { push, newline } = context;777 for (let i = 0; i < nodes.length; i++) {778 const node = nodes[i];779 if (isString(node)) {780 push(node);781 }...
componentRenderUtils.js
Source:componentRenderUtils.js
1import {2 normalizeVNode,3 createVNode,4 Comment,5 cloneVNode,6 isVNode,7 blockStack8} from './vnode.js'9import { isOn, isModelListener } from '../shared/index.js'10import { isEmitListener } from './componentEmits.js'11import { setCurrentRenderingInstance } from './componentRenderContext.js'12export function renderComponentRoot (instance) {13 const {14 type: Component,15 vnode,16 proxy,17 withProxy,18 props,19 propsOptions: [propsOptions],20 slots,21 attrs,22 emit,23 render,24 renderCache,25 data,26 setupState,27 ctx,28 inheritAttrs29 } = instance30 let result31 let fallthroughAttrs32 const prev = setCurrentRenderingInstance(instance)33 try {34 if (vnode.shapeFlag & 4) {35 const proxyToUse = withProxy || proxy36 result = normalizeVNode(37 render.call(38 proxyToUse,39 proxyToUse,40 renderCache,41 props,42 setupState,43 data,44 ctx45 )46 )47 fallthroughAttrs = attrs48 } else {49 const render = Component50 result = normalizeVNode(51 render.length > 152 ? render(props, { attrs, slots, emit })53 : render(props, null)54 )55 fallthroughAttrs = Component.props56 ? attrs57 : getFunctionalFallthrough(attrs)58 }59 } catch (err) {60 blockStack.length = 061 result = createVNode(Comment)62 }63 let root = result64 if (fallthroughAttrs && inheritAttrs !== false) {65 const keys = Object.keys(fallthroughAttrs)66 const { shapeFlag } = root67 if (keys.length) {68 if (shapeFlag & (1 | 6)) {69 if (propsOptions && keys.some(isModelListener)) {70 fallthroughAttrs = filterModelListeners(71 fallthroughAttrs,72 propsOptions73 )74 }75 root = cloneVNode(root, fallthroughAttrs)76 }77 }78 }79 if (vnode.dirs) {80 root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs81 }82 if (vnode.transition) {83 root.transition = vnode.transition84 }85 result = root86 setCurrentRenderingInstance(prev)87 return result88}89export function filterSingleRoot (children) {90 let singleRoot91 for (let i = 0; i < children.length; i++) {92 const child = children[i]93 if (isVNode(child)) {94 if (child.type !== Comment || child.children === 'v-if') {95 if (singleRoot) {96 return97 } else {98 singleRoot = child99 }100 }101 } else {102 return103 }104 }105 return singleRoot106}107const getFunctionalFallthrough = attrs => {108 let res109 for (const key in attrs) {110 if (key === 'class' || key === 'style' || isOn(key)) {111 ;(res || (res = {}))[key] = attrs[key]112 }113 }114 return res115}116const filterModelListeners = (attrs, props) => {117 const res = {}118 for (const key in attrs) {119 if (!isModelListener(key) || !(key.slice(9) in props)) {120 res[key] = attrs[key]121 }122 }123 return res124}125const isElementRoot = vnode => {126 return vnode.shapeFlag & (6 | 1) || vnode.type === Comment127}128export function shouldUpdateComponent (prevVNode, nextVNode, optimized) {129 const { props: prevProps, children: prevChildren, component } = prevVNode130 const { props: nextProps, children: nextChildren, patchFlag } = nextVNode131 const emits = component.emitsOptions132 if (nextVNode.dirs || nextVNode.transition) {133 return true134 }135 if (optimized && patchFlag >= 0) {136 if (patchFlag & 1024) {137 return true138 }139 if (patchFlag & 16) {140 if (!prevProps) {141 return !!nextProps142 }143 return hasPropsChanged(prevProps, nextProps, emits)144 } else if (patchFlag & 8) {145 const dynamicProps = nextVNode.dynamicProps146 for (let i = 0; i < dynamicProps.length; i++) {147 const key = dynamicProps[i]148 if (nextProps[key] !== prevProps[key] && !isEmitListener(emits, key)) {149 return true150 }151 }152 }153 } else {154 if (prevChildren || nextChildren) {155 if (!nextChildren || !nextChildren.$stable) {156 return true157 }158 }159 if (prevProps === nextProps) {160 return false161 }162 if (!prevProps) {163 return !!nextProps164 }165 if (!nextProps) {166 return true167 }168 return hasPropsChanged(prevProps, nextProps, emits)169 }170 return false171}172function hasPropsChanged (prevProps, nextProps, emitsOptions) {173 const nextKeys = Object.keys(nextProps)174 if (nextKeys.length !== Object.keys(prevProps).length) {175 return true176 }177 for (let i = 0; i < nextKeys.length; i++) {178 const key = nextKeys[i]179 if (180 nextProps[key] !== prevProps[key] &&181 !isEmitListener(emitsOptions, key)182 ) {183 return true184 }185 }186 return false187}188export function updateHOCHostEl ({ vnode, parent }, el) {189 while (parent && parent.subTree === vnode) {190 ;(vnode = parent.vnode).el = el191 parent = parent.parent192 }...
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const context = await browser.newContext();5 const page = await context.newPage();6 const element = await page.$('text=Get started');7 const root = await page.mainFrame().filterSingleRoot(element);8 console.log(root);9 await browser.close();10})();11const { chromium } = require('playwright');12(async () => {13 const browser = await chromium.launch();14 const context = await browser.newContext();15 const page = await context.newPage();16 const element = await page.$('text=Get started');17 const root = await page.mainFrame().filterSingleRoot(element);18 console.log(root);19 await browser.close();20})();21const { chromium } = require('playwright');22(async () => {23 const browser = await chromium.launch();24 const context = await browser.newContext();25 const page = await context.newPage();26 const element = await page.$('text=Get started');27 const root = await page.mainFrame().filterSingleRoot(element);28 console.log(root);29 await browser.close();30})();31const { chromium } = require('playwright');32(async () => {33 const browser = await chromium.launch();34 const context = await browser.newContext();35 const page = await context.newPage();36 const element = await page.$('text=Get started');37 const root = await page.mainFrame().filterSingleRoot(element);38 console.log(root);39 await browser.close();40})();41const { chromium } = require('playwright');42(async () => {43 const browser = await chromium.launch();44 const context = await browser.newContext();45 const page = await context.newPage();46 const element = await page.$('text=
Using AI Code Generation
1const { chromium } = require('playwright');2const { filterSingleRoot } = require('playwright/lib/utils/dom.js');3(async () => {4 const browser = await chromium.launch({ headless: false });5 const context = await browser.newContext();6 const page = await context.newPage();7 const input = await page.$('input');8 const root = await page.evaluateHandle(() => document);9 const filtered = await filterSingleRoot(root, input);10 console.log(filtered);11 await browser.close();12})();13ElementHandle {14 _channel: Connection {15 _events: [Object: null prototype] {},16 _callbacks: Map {},17 _sessions: Map {},18 _connection: WebSocket {19 _extensions: {},20 _receiver: Receiver {21 _extensions: {},22 [Symbol(kCapture)]: false23 },24 _sender: Sender {25 _extensions: {},
Using AI Code Generation
1const playwright = require('playwright');2const { filterSingleRoot } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');3(async () => {4 const browser = await playwright.chromium.launch();5 const context = await browser.newContext();6 const page = await context.newPage();7 const root = await page.$('html');8 const filteredRoot = filterSingleRoot(root);9 console.log(filteredRoot);10 await browser.close();11})();12ElementHandle {13 _context: BrowserContext {14 _browser: Browser {15 _closeCallback: [Function (anonymous)]16 },17 _closedCallback: [Function (anonymous)],18 _didCloseCallback: [Function (anonymous)],19 },20 _page: Page {21 _closedCallback: [Function (anonymous)],22 _didCloseCallback: [Function (anonymous)],
Using AI Code Generation
1const { filterSingleRoot } = require('playwright/lib/utils/selectorParser');2const { parseSelector } = require('playwright/lib/utils/selectorParser');3const parsed = parseSelector(selector);4const filtered = filterSingleRoot(parsed);5console.log(selector);6console.log(filtered);7console.log(parsed);8const { chromium } = require('playwright');9(async () => {10 const browser = await chromium.launch({ headless: false });11 const context = await browser.newContext();12 const page = await context.newPage();13 console.log(element);14 await browser.close();15})();16const { chromium } = require('playwright');17(async () => {18 const browser = await chromium.launch({ headless: false });19 const context = await browser.newContext();20 const page = await context.newPage();21 const element = await page.$('div.class1 >> div.class2');22 console.log(element);23 await browser.close();24})();
Using AI Code Generation
1const { filterSingleRoot } = require('playwright/lib/utils/utils');2const test = filterSingleRoot('test');3console.log(test);4const { filterSingleRoot } = require('playwright/lib/utils/utils');5const test = filterSingleRoot('test');6console.log(test);7module: {8 {9 },10 {11 use: {12 options: {13 },14 },15 },16 {17 use: {18 options: {19 },20 },21 },22 },
Using AI Code Generation
1const { filterSingleRoot } = require('playwright/lib/server/supplements/recorder/recorderSupplement');2const { parseSelector } = require('playwright/lib/server/supplements/recorder/selectorParser');3const { parseScript } = require('playwright/lib/server/supplements/recorder/selectorScript');4const { parseTrace } = require('playwright/lib/server/supplements/recorder/selectorTrace');5const { parseXPath } = require('playwright/lib/server/supplements/recorder/selectorXPath');6const { parseCSS } = require('playwright/lib/server/supplements/recorder/selectorCSS');7const { parseText } = require('playwright/lib/server/supplements/recorder/selectorText');8(async () => {9 const root = parseSelector('css=#root');10 const text = parseSelector('text=Hello');
Using AI Code Generation
1const { filterSingleRoot } = require('playwright/lib/utils/selectorParser');2const selector = filterSingleRoot('css=div > span');3console.log(selector);4{ value: 'css=div > span', engine: 'css' }5const { filterSingleRoot } = require('playwright/lib/utils/selectorParser');6const selector = filterSingleRoot('css=div > span');7console.log(selector);8const { chromium } = require('playwright');9(async () => {10 const browser = await chromium.launch();11 const context = await browser.newContext();12 const page = await context.newPage();13 const element = await page.$(selector);14 console.log(element);15 await browser.close();16})();17{ value: 'css=div > span', engine: 'css' }
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!!