Best JavaScript code snippet using playwright-internal
vue3.js
Source:vue3.js
...1827 }1828 // Check if an incoming prop key is a declared emit event listener.1829 // e.g. With `emits: { click: null }`, props named `onClick` and `onclick` are1830 // both considered matched listeners.1831 function isEmitListener(options, key) {1832 if (!options || !isOn(key)) {1833 return false;1834 }1835 key = key.replace(/Once$/, '');1836 return (hasOwn(options, key[2].toLowerCase() + key.slice(3)) ||1837 hasOwn(options, key.slice(2)));1838 }1839 // mark the current rendering instance for asset resolution (e.g.1840 // resolveComponent, resolveDirective) during render1841 let currentRenderingInstance = null;1842 function setCurrentRenderingInstance(instance) {1843 currentRenderingInstance = instance;1844 }1845 // dev only flag to track whether $attrs was used during render.1846 // If $attrs was used during render then the warning for failed attrs1847 // fallthrough can be suppressed.1848 let accessedAttrs = false;1849 function markAttrsAccessed() {1850 accessedAttrs = true;1851 }1852 function renderComponentRoot(instance) {1853 const { type: Component, vnode, proxy, withProxy, props, propsOptions: [propsOptions], slots, attrs, emit, render, renderCache, data, setupState, ctx } = instance;1854 let result;1855 currentRenderingInstance = instance;1856 {1857 accessedAttrs = false;1858 }1859 try {1860 let fallthroughAttrs;1861 if (vnode.shapeFlag & 4 /* STATEFUL_COMPONENT */) {1862 // withProxy is a proxy with a different `has` trap only for1863 // runtime-compiled render functions using `with` block.1864 const proxyToUse = withProxy || proxy;1865 result = normalizeVNode(render.call(proxyToUse, proxyToUse, renderCache, props, setupState, data, ctx));1866 fallthroughAttrs = attrs;1867 }1868 else {1869 // functional1870 const render = Component;1871 // in dev, mark attrs accessed if optional props (attrs === props)1872 if (true && attrs === props) {1873 markAttrsAccessed();1874 }1875 result = normalizeVNode(render.length > 11876 ? render(props, true1877 ? {1878 get attrs() {1879 markAttrsAccessed();1880 return attrs;1881 },1882 slots,1883 emit1884 }1885 : { attrs, slots, emit })1886 : render(props, null /* we know it doesn't need it */));1887 fallthroughAttrs = Component.props1888 ? attrs1889 : getFunctionalFallthrough(attrs);1890 }1891 // attr merging1892 // in dev mode, comments are preserved, and it's possible for a template1893 // to have comments along side the root element which makes it a fragment1894 let root = result;1895 let setRoot = undefined;1896 if (true) {1897 ;1898 [root, setRoot] = getChildRoot(result);1899 }1900 if (Component.inheritAttrs !== false && fallthroughAttrs) {1901 const keys = Object.keys(fallthroughAttrs);1902 const { shapeFlag } = root;1903 if (keys.length) {1904 if (shapeFlag & 1 /* ELEMENT */ ||1905 shapeFlag & 6 /* COMPONENT */) {1906 if (propsOptions && keys.some(isModelListener)) {1907 // If a v-model listener (onUpdate:xxx) has a corresponding declared1908 // prop, it indicates this component expects to handle v-model and1909 // it should not fallthrough.1910 // related: #1543, #1643, #19891911 fallthroughAttrs = filterModelListeners(fallthroughAttrs, propsOptions);1912 }1913 root = cloneVNode(root, fallthroughAttrs);1914 }1915 else if (true && !accessedAttrs && root.type !== Comment) {1916 const allAttrs = Object.keys(attrs);1917 const eventAttrs = [];1918 const extraAttrs = [];1919 for (let i = 0, l = allAttrs.length; i < l; i++) {1920 const key = allAttrs[i];1921 if (isOn(key)) {1922 // ignore v-model handlers when they fail to fallthrough1923 if (!isModelListener(key)) {1924 // remove `on`, lowercase first letter to reflect event casing1925 // accurately1926 eventAttrs.push(key[2].toLowerCase() + key.slice(3));1927 }1928 }1929 else {1930 extraAttrs.push(key);1931 }1932 }1933 if (extraAttrs.length) {1934 warn(`Extraneous non-props attributes (` +1935 `${extraAttrs.join(', ')}) ` +1936 `were passed to component but could not be automatically inherited ` +1937 `because component renders fragment or text root nodes.`);1938 }1939 if (eventAttrs.length) {1940 warn(`Extraneous non-emits event listeners (` +1941 `${eventAttrs.join(', ')}) ` +1942 `were passed to component but could not be automatically inherited ` +1943 `because component renders fragment or text root nodes. ` +1944 `If the listener is intended to be a component custom event listener only, ` +1945 `declare it using the "emits" option.`);1946 }1947 }1948 }1949 }1950 // inherit directives1951 if (vnode.dirs) {1952 if (true && !isElementRoot(root)) {1953 warn(`Runtime directive used on component with non-element root node. ` +1954 `The directives will not function as intended.`);1955 }1956 root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs;1957 }1958 // inherit transition data1959 if (vnode.transition) {1960 if (true && !isElementRoot(root)) {1961 warn(`Component inside <Transition> renders non-element root node ` +1962 `that cannot be animated.`);1963 }1964 root.transition = vnode.transition;1965 }1966 if (true && setRoot) {1967 setRoot(root);1968 }1969 else {1970 result = root;1971 }1972 }1973 catch (err) {1974 handleError(err, instance, 1 /* RENDER_FUNCTION */);1975 result = createVNode(Comment);1976 }1977 currentRenderingInstance = null;1978 return result;1979 }1980 /**1981 * dev only1982 * In dev mode, template root level comments are rendered, which turns the1983 * template into a fragment root, but we need to locate the single element1984 * root for attrs and scope id processing.1985 */1986 const getChildRoot = (vnode) => {1987 if (vnode.type !== Fragment) {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);2527 }2528 }2529 else {2530 queuePostFlushCb(fn);2531 }2532 }2533 function setActiveBranch(suspense, branch) {2534 suspense.activeBranch = branch;2535 const { vnode, parentComponent } = suspense;2536 const el = (vnode.el = branch.el);2537 // in case suspense is the root node of a component,2538 // recursively update the HOC el2539 if (parentComponent && parentComponent.subTree === vnode) {2540 parentComponent.vnode.el = el;2541 updateHOCHostEl(parentComponent, el);2542 }2543 }2544 let isRenderingCompiledSlot = 0;2545 const setCompiledSlotRendering = (n) => (isRenderingCompiledSlot += n);2546 /**2547 * Compiler runtime helper for rendering `<slot/>`2548 * @private2549 */2550 function renderSlot(slots, name, props = {}, 2551 // this is not a user-facing function, so the fallback is always generated by2552 // the compiler and guaranteed to be a function returning an array2553 fallback) {2554 let slot = slots[name];2555 if ( slot && slot.length > 1) {2556 warn(`SSR-optimized slot function detected in a non-SSR-optimized render ` +2557 `function. You need to mark this component with $dynamic-slots in the ` +2558 `parent template.`);2559 slot = () => [];2560 }2561 // a compiled slot disables block tracking by default to avoid manual2562 // invocation interfering with template-based block tracking, but in2563 // `renderSlot` we can be sure that it's template-based so we can force2564 // enable it.2565 isRenderingCompiledSlot++;2566 const rendered = (openBlock(),2567 createBlock(Fragment, { key: props.key }, slot ? slot(props) : fallback ? fallback() : [], slots._ === 1 /* STABLE */2568 ? 64 /* STABLE_FRAGMENT */2569 : -2 /* BAIL */));2570 isRenderingCompiledSlot--;2571 return rendered;2572 }2573 /**2574 * Wrap a slot function to memoize current rendering instance2575 * @private2576 */2577 function withCtx(fn, ctx = currentRenderingInstance) {2578 if (!ctx)2579 return fn;2580 const renderFnWithContext = (...args) => {2581 // If a user calls a compiled slot inside a template expression (#1745), it2582 // can mess up block tracking, so by default we need to push a null block to2583 // avoid that. This isn't necessary if rendering a compiled `<slot>`.2584 if (!isRenderingCompiledSlot) {2585 openBlock(true /* null block that disables tracking */);2586 }2587 const owner = currentRenderingInstance;2588 setCurrentRenderingInstance(ctx);2589 const res = fn(...args);2590 setCurrentRenderingInstance(owner);2591 if (!isRenderingCompiledSlot) {2592 closeBlock();2593 }2594 return res;2595 };2596 renderFnWithContext._c = true;2597 return renderFnWithContext;2598 }2599 // SFC scoped style ID management.2600 let currentScopeId = null;2601 const scopeIdStack = [];2602 /**2603 * @private2604 */2605 function pushScopeId(id) {2606 scopeIdStack.push((currentScopeId = id));2607 }2608 /**2609 * @private2610 */2611 function popScopeId() {2612 scopeIdStack.pop();2613 currentScopeId = scopeIdStack[scopeIdStack.length - 1] || null;2614 }2615 /**2616 * @private2617 */2618 function withScopeId(id) {2619 return ((fn) => withCtx(function () {2620 pushScopeId(id);2621 const res = fn.apply(this, arguments);2622 popScopeId();2623 return res;2624 }));2625 }2626 function initProps(instance, rawProps, isStateful, // result of bitwise flag comparison2627 isSSR = false) {2628 const props = {};2629 const attrs = {};2630 def(attrs, InternalObjectKey, 1);2631 setFullProps(instance, rawProps, props, attrs);2632 // validation2633 {2634 validateProps(props, instance);2635 }2636 if (isStateful) {2637 // stateful2638 instance.props = isSSR ? props : shallowReactive(props);2639 }2640 else {2641 if (!instance.type.props) {2642 // functional w/ optional props, props === attrs2643 instance.props = attrs;2644 }2645 else {2646 // functional w/ declared props2647 instance.props = props;2648 }2649 }2650 instance.attrs = attrs;2651 }2652 function updateProps(instance, rawProps, rawPrevProps, optimized) {2653 const { props, attrs, vnode: { patchFlag } } = instance;2654 const rawCurrentProps = toRaw(props);2655 const [options] = instance.propsOptions;2656 if (2657 // always force full diff in dev2658 // - #1942 if hmr is enabled with sfc component2659 // - vite#872 non-sfc component used by sfc component2660 !(2661 (instance.type.__hmrId ||2662 (instance.parent && instance.parent.type.__hmrId))) &&2663 (optimized || patchFlag > 0) &&2664 !(patchFlag & 16 /* FULL_PROPS */)) {2665 if (patchFlag & 8 /* PROPS */) {2666 // Compiler-generated props & no keys change, just set the updated2667 // the props.2668 const propsToUpdate = instance.vnode.dynamicProps;2669 for (let i = 0; i < propsToUpdate.length; i++) {2670 const key = propsToUpdate[i];2671 // PROPS flag guarantees rawProps to be non-null2672 const value = rawProps[key];2673 if (options) {2674 // attr / props separation was done on init and will be consistent2675 // in this code path, so just check if attrs have it.2676 if (hasOwn(attrs, key)) {2677 attrs[key] = value;2678 }2679 else {2680 const camelizedKey = camelize(key);2681 props[camelizedKey] = resolvePropValue(options, rawCurrentProps, camelizedKey, value, instance);2682 }2683 }2684 else {2685 attrs[key] = value;2686 }2687 }2688 }2689 }2690 else {2691 // full props update.2692 setFullProps(instance, rawProps, props, attrs);2693 // in case of dynamic props, check if we need to delete keys from2694 // the props object2695 let kebabKey;2696 for (const key in rawCurrentProps) {2697 if (!rawProps ||2698 // for camelCase2699 (!hasOwn(rawProps, key) &&2700 // it's possible the original props was passed in as kebab-case2701 // and converted to camelCase (#955)2702 ((kebabKey = hyphenate(key)) === key || !hasOwn(rawProps, kebabKey)))) {2703 if (options) {2704 if (rawPrevProps &&2705 // for camelCase2706 (rawPrevProps[key] !== undefined ||2707 // for kebab-case2708 rawPrevProps[kebabKey] !== undefined)) {2709 props[key] = resolvePropValue(options, rawProps || EMPTY_OBJ, key, undefined, instance);2710 }2711 }2712 else {2713 delete props[key];2714 }2715 }2716 }2717 // in the case of functional component w/o props declaration, props and2718 // attrs point to the same object so it should already have been updated.2719 if (attrs !== rawCurrentProps) {2720 for (const key in attrs) {2721 if (!rawProps || !hasOwn(rawProps, key)) {2722 delete attrs[key];2723 }2724 }2725 }2726 }2727 // trigger updates for $attrs in case it's used in component slots2728 trigger(instance, "set" /* SET */, '$attrs');2729 if ( rawProps) {2730 validateProps(props, instance);2731 }2732 }2733 function setFullProps(instance, rawProps, props, attrs) {2734 const [options, needCastKeys] = instance.propsOptions;2735 if (rawProps) {2736 for (const key in rawProps) {2737 const value = rawProps[key];2738 // key, ref are reserved and never passed down2739 if (isReservedProp(key)) {2740 continue;2741 }2742 // prop option names are camelized during normalization, so to support2743 // kebab -> camel conversion here we need to camelize the key.2744 let camelKey;2745 if (options && hasOwn(options, (camelKey = camelize(key)))) {2746 props[camelKey] = value;2747 }2748 else if (!isEmitListener(instance.emitsOptions, key)) {2749 // Any non-declared (either as a prop or an emitted event) props are put2750 // into a separate `attrs` object for spreading. Make sure to preserve2751 // original key casing2752 attrs[key] = value;2753 }2754 }2755 }2756 if (needCastKeys) {2757 const rawCurrentProps = toRaw(props);2758 for (let i = 0; i < needCastKeys.length; i++) {2759 const key = needCastKeys[i];2760 props[key] = resolvePropValue(options, rawCurrentProps, key, rawCurrentProps[key], instance);2761 }2762 }
...
jquery-3.6.0.min.js
Source:jquery-3.6.0.min.js
...555 !n && t.mixins.length && t.mixins.forEach(extendEmits), e.extends && extendEmits(e.extends), e.mixins && e.mixins.forEach(extendEmits)556 }557 return s || i ? (w(s) ? s.forEach((e => a[e] = null)) : b(a, s), r.set(e, a), a) : (r.set(e, null), null)558}559function isEmitListener(e, t) {560 return !(!e || !isOn(t)) && (t = t.slice(2).replace(/Once$/, ""), hasOwn(e, t[0].toLowerCase() + t.slice(1)) || hasOwn(e, C(t)) || hasOwn(e, t))561}562let be = null, Re = null;563function setCurrentRenderingInstance(e) {564 const t = be;565 return be = e, Re = e && e.type.__scopeId || null, t566}567function pushScopeId(e) {568 Re = e569}570function popScopeId() {571 Re = null572}573const withScopeId = e => withCtx;574function withCtx(e, t = be, n) {575 if (!t) return e;576 if (e._n) return e;577 const renderFnWithContext = (...n) => {578 renderFnWithContext._d && setBlockTracking(-1);579 const r = setCurrentRenderingInstance(t), o = e(...n);580 return setCurrentRenderingInstance(r), renderFnWithContext._d && setBlockTracking(1), o581 };582 return renderFnWithContext._n = !0, renderFnWithContext._c = !0, renderFnWithContext._d = !0, renderFnWithContext583}584function renderComponentRoot(e) {585 const {586 type: t,587 vnode: n,588 proxy: r,589 withProxy: o,590 props: s,591 propsOptions: [a],592 slots: i,593 attrs: l,594 emit: c,595 render: u,596 renderCache: f,597 data: p,598 setupState: d,599 ctx: m,600 inheritAttrs: g601 } = e;602 let v;603 const y = setCurrentRenderingInstance(e);604 try {605 let e;606 if (4 & n.shapeFlag) {607 const t = o || r;608 v = normalizeVNode(u.call(t, t, f, s, d, p, m)), e = l609 } else {610 const n = t;611 0, v = normalizeVNode(n.length > 1 ? n(s, {612 attrs: l,613 slots: i,614 emit: c615 }) : n(s, null)), e = t.props ? l : getFunctionalFallthrough(l)616 }617 let y = v;618 if (e && !1 !== g) {619 const t = Object.keys(e), {shapeFlag: n} = y;620 t.length && (1 & n || 6 & n) && (a && t.some(isModelListener) && (e = filterModelListeners(e, a)), y = cloneVNode(y, e))621 }622 0, n.dirs && (y.dirs = y.dirs ? y.dirs.concat(n.dirs) : n.dirs), n.transition && (y.transition = n.transition), v = y623 } catch (b) {624 ze.length = 0, handleError(b, e, 1), v = De(He)625 }626 return setCurrentRenderingInstance(y), v627}628const getFunctionalFallthrough = e => {629 let t;630 for (const n in e) ("class" === n || "style" === n || isOn(n)) && ((t || (t = {}))[n] = e[n]);631 return t632}, filterModelListeners = (e, t) => {633 const n = {};634 for (const r in e) isModelListener(r) && r.slice(9) in t || (n[r] = e[r]);635 return n636};637function hasPropsChanged(e, t, n) {638 const r = Object.keys(t);639 if (r.length !== Object.keys(e).length) return !0;640 for (let o = 0; o < r.length; o++) {641 const s = r[o];642 if (t[s] !== e[s] && !isEmitListener(n, s)) return !0643 }644 return !1645}646function provide(e, t) {647 if (Ye) {648 let n = Ye.provides;649 const r = Ye.parent && Ye.parent.provides;650 r === n && (n = Ye.provides = Object.create(r)), n[e] = t651 } else ;652}653function inject(e, t, n = !1) {654 const r = Ye || be;655 if (r) {656 const o = null == r.parent ? r.vnode.appContext && r.vnode.appContext.provides : r.parent.provides;657 if (o && e in o) return o[e];658 if (arguments.length > 1) return n && isFunction(t) ? t.call(r.proxy) : t659 }660}661const we = {};662function watch(e, t, n) {663 return doWatch(e, t, n)664}665function doWatch(e, t, {immediate: n, deep: r, flush: o, onTrack: s, onTrigger: a} = g, i = Ye) {666 let l, c, u = !1, f = !1;667 if (isRef(e) ? (l = () => e.value, u = !!e._shallow) : isReactive(e) ? (l = () => e, r = !0) : w(e) ? (f = !0, u = e.some(isReactive), l = () => e.map((e => isRef(e) ? e.value : isReactive(e) ? traverse(e) : isFunction(e) ? callWithErrorHandling(e, i, 2) : void 0))) : l = isFunction(e) ? t ? () => callWithErrorHandling(e, i, 2) : () => {668 if (!i || !i.isUnmounted) return c && c(), callWithAsyncErrorHandling(e, i, 3, [onInvalidate])669 } : NOOP, t && r) {670 const e = l;671 l = () => traverse(e())672 }673 let onInvalidate = e => {674 c = m.options.onStop = () => {675 callWithErrorHandling(e, i, 4)676 }677 }, p = f ? [] : we;678 const job = () => {679 if (m.active) if (t) {680 const e = m();681 (r || u || (f ? e.some(((e, t) => hasChanged(e, p[t]))) : hasChanged(e, p))) && (c && c(), callWithAsyncErrorHandling(t, i, 3, [e, p === we ? void 0 : p, onInvalidate]), p = e)682 } else m()683 };684 let d;685 job.allowRecurse = !!t, d = "sync" === o ? job : "post" === o ? () => Me(job, i && i.suspense) : () => {686 !i || i.isMounted ? function queuePreFlushCb(e) {687 queueCb(e, fe, ue, pe)688 }(job) : job()689 };690 const m = effect(l, {lazy: !0, onTrack: s, onTrigger: a, scheduler: d});691 return recordInstanceBoundEffect(m, i), t ? n ? job() : p = m() : "post" === o ? Me(m, i && i.suspense) : m(), () => {692 stop(m), i && remove(i.effects, m)693 }694}695function instanceWatch(e, t, n) {696 const r = this.proxy, o = isString$1(e) ? e.includes(".") ? createPathGetter(r, e) : () => r[e] : e.bind(r, r);697 let s;698 return isFunction(t) ? s = t : (s = t.handler, n = t), doWatch(o, s.bind(r), n, this)699}700function createPathGetter(e, t) {701 const n = t.split(".");702 return () => {703 let t = e;704 for (let e = 0; e < n.length && t; e++) t = t[n[e]];705 return t706 }707}708function traverse(e, t = new Set) {709 if (!isObject(e) || t.has(e) || e.__v_skip) return e;710 if (t.add(e), isRef(e)) traverse(e.value, t); else if (w(e)) for (let n = 0; n < e.length; n++) traverse(e[n], t); else if (isSet(e) || isMap(e)) e.forEach((e => {711 traverse(e, t)712 })); else if (isPlainObject(e)) for (const n in e) traverse(e[n], t);713 return e714}715function defineComponent(e) {716 return isFunction(e) ? {setup: e, name: e.name} : e717}718const isAsyncWrapper = e => !!e.type.__asyncLoader;719function defineAsyncComponent(e) {720 isFunction(e) && (e = {loader: e});721 const {722 loader: t,723 loadingComponent: n,724 errorComponent: r,725 delay: o = 200,726 timeout: s,727 suspensible: a = !0,728 onError: i729 } = e;730 let l, c = null, u = 0;731 const load = () => {732 let e;733 return c || (e = c = t().catch((e => {734 if (e = e instanceof Error ? e : new Error(String(e)), i) return new Promise(((t, n) => {735 i(e, (() => t((u++, c = null, load()))), (() => n(e)), u + 1)736 }));737 throw e738 })).then((t => e !== c && c ? c : (t && (t.__esModule || "Module" === t[Symbol.toStringTag]) && (t = t.default), l = t, t))))739 };740 return defineComponent({741 name: "AsyncComponentWrapper", __asyncLoader: load, get __asyncResolved() {742 return l743 }, setup() {744 const e = Ye;745 if (l) return () => createInnerComp(l, e);746 const onError = t => {747 c = null, handleError(t, e, 13, !r)748 };749 if (a && e.suspense) return load().then((t => () => createInnerComp(t, e))).catch((e => (onError(e), () => r ? De(r, {error: e}) : null)));750 const t = ref(!1), i = ref(), u = ref(!!o);751 return o && setTimeout((() => {752 u.value = !1753 }), o), null != s && setTimeout((() => {754 if (!t.value && !i.value) {755 const e = new Error(`Async component timed out after ${s}ms.`);756 onError(e), i.value = e757 }758 }), s), load().then((() => {759 t.value = !0, e.parent && isKeepAlive(e.parent.vnode) && queueJob(e.parent.update)760 })).catch((e => {761 onError(e), i.value = e762 })), () => t.value && l ? createInnerComp(l, e) : i.value && r ? De(r, {error: i.value}) : n && !u.value ? De(n) : void 0763 }764 })765}766function createInnerComp(e, {vnode: {ref: t, props: n, children: r}}) {767 const o = De(e, n, r);768 return o.ref = t, o769}770const isKeepAlive = e => e.type.__isKeepAlive;771function onActivated(e, t) {772 registerKeepAliveHook(e, "a", t)773}774function onDeactivated(e, t) {775 registerKeepAliveHook(e, "da", t)776}777function registerKeepAliveHook(e, t, n = Ye) {778 const r = e.__wdc || (e.__wdc = () => {779 let t = n;780 for (; t;) {781 if (t.isDeactivated) return;782 t = t.parent783 }784 e()785 });786 if (injectHook(t, r, n), n) {787 let e = n.parent;788 for (; e && e.parent;) isKeepAlive(e.parent.vnode) && injectToKeepAliveRoot(r, t, n, e), e = e.parent789 }790}791function injectToKeepAliveRoot(e, t, n, r) {792 const o = injectHook(t, e, r, !0);793 Ce((() => {794 remove(r[t], o)795 }), n)796}797function injectHook(e, t, n = Ye, r = !1) {798 if (n) {799 const o = n[e] || (n[e] = []), s = t.__weh || (t.__weh = (...r) => {800 if (n.isUnmounted) return;801 pauseTracking(), setCurrentInstance(n);802 const o = callWithAsyncErrorHandling(t, n, e, r);803 return setCurrentInstance(null), resetTracking(), o804 });805 return r ? o.unshift(s) : o.push(s), s806 }807}808const createHook = e => (t, n = Ye) => (!Xe || "sp" === e) && injectHook(e, t, n), _e = createHook("bm"),809 ke = createHook("m"), xe = createHook("bu"), Se = createHook("u"), Ee = createHook("bum"), Ce = createHook("um"),810 Ae = createHook("sp"), Oe = createHook("rtg"), Pe = createHook("rtc");811function onErrorCaptured(e, t = Ye) {812 injectHook("ec", e, t)813}814let Te = !0;815function applyOptions(e) {816 const t = resolveMergedOptions(e), n = e.proxy, r = e.ctx;817 Te = !1, t.beforeCreate && callHook(t.beforeCreate, e, "bc");818 const {819 data: o,820 computed: s,821 methods: a,822 watch: i,823 provide: l,824 inject: c,825 created: u,826 beforeMount: f,827 mounted: p,828 beforeUpdate: d,829 updated: m,830 activated: v,831 deactivated: y,832 beforeDestroy: b,833 beforeUnmount: R,834 destroyed: _,835 unmounted: k,836 render: x,837 renderTracked: S,838 renderTriggered: E,839 errorCaptured: C,840 serverPrefetch: A,841 expose: O,842 inheritAttrs: P,843 components: T,844 directives: j,845 filters: N846 } = t;847 if (c && function resolveInjections(e, t, n = NOOP) {848 w(e) && (e = normalizeInject(e));849 for (const r in e) {850 const n = e[r];851 isObject(n) ? t[r] = "default" in n ? inject(n.from || r, n.default, !0) : inject(n.from || r) : t[r] = inject(n)852 }853 }(c, r, null), a) for (const g in a) {854 const e = a[g];855 isFunction(e) && (r[g] = e.bind(n))856 }857 if (o) {858 const t = o.call(n, n);859 isObject(t) && (e.data = reactive(t))860 }861 if (Te = !0, s) for (const g in s) {862 const e = s[g], t = computed({863 get: isFunction(e) ? e.bind(n, n) : isFunction(e.get) ? e.get.bind(n, n) : NOOP,864 set: !isFunction(e) && isFunction(e.set) ? e.set.bind(n) : NOOP865 });866 Object.defineProperty(r, g, {enumerable: !0, configurable: !0, get: () => t.value, set: e => t.value = e})867 }868 if (i) for (const g in i) createWatcher(i[g], r, n, g);869 if (l) {870 const e = isFunction(l) ? l.call(n) : l;871 Reflect.ownKeys(e).forEach((t => {872 provide(t, e[t])873 }))874 }875 function registerLifecycleHook(e, t) {876 w(t) ? t.forEach((t => e(t.bind(n)))) : t && e(t.bind(n))877 }878 if (u && callHook(u, e, "c"), registerLifecycleHook(_e, f), registerLifecycleHook(ke, p), registerLifecycleHook(xe, d), registerLifecycleHook(Se, m), registerLifecycleHook(onActivated, v), registerLifecycleHook(onDeactivated, y), registerLifecycleHook(onErrorCaptured, C), registerLifecycleHook(Pe, S), registerLifecycleHook(Oe, E), registerLifecycleHook(Ee, R), registerLifecycleHook(Ce, k), registerLifecycleHook(Ae, A), w(O)) if (O.length) {879 const t = e.exposed || (e.exposed = proxyRefs({}));880 O.forEach((e => {881 t[e] = function toRef(e, t) {882 return isRef(e[t]) ? e[t] : new ObjectRefImpl(e, t)883 }(n, e)884 }))885 } else e.exposed || (e.exposed = g);886 x && e.render === NOOP && (e.render = x), null != P && (e.inheritAttrs = P), T && (e.components = T), j && (e.directives = j)887}888function callHook(e, t, n) {889 callWithAsyncErrorHandling(w(e) ? e.map((e => e.bind(t.proxy))) : e.bind(t.proxy), t, n)890}891function createWatcher(e, t, n, r) {892 const o = r.includes(".") ? createPathGetter(n, r) : () => n[r];893 if (isString$1(e)) {894 const n = t[e];895 isFunction(n) && watch(o, n)896 } else if (isFunction(e)) watch(o, e.bind(n)); else if (isObject(e)) if (w(e)) e.forEach((e => createWatcher(e, t, n, r))); else {897 const r = isFunction(e.handler) ? e.handler.bind(n) : t[e.handler];898 isFunction(r) && watch(o, r, e)899 }900}901function resolveMergedOptions(e) {902 const t = e.type, {mixins: n, extends: r} = t, {903 mixins: o,904 optionsCache: s,905 config: {optionMergeStrategies: a}906 } = e.appContext, i = s.get(t);907 let l;908 return i ? l = i : o.length || n || r ? (l = {}, o.length && o.forEach((e => mergeOptions$1(l, e, a, !0))), mergeOptions$1(l, t, a)) : l = t, s.set(t, l), l909}910function mergeOptions$1(e, t, n, r = !1) {911 const {mixins: o, extends: s} = t;912 s && mergeOptions$1(e, s, n, !0), o && o.forEach((t => mergeOptions$1(e, t, n, !0)));913 for (const a in t) if (r && "expose" === a) ; else {914 const r = je[a] || n && n[a];915 e[a] = r ? r(e[a], t[a]) : t[a]916 }917 return e918}919const je = {920 data: mergeDataFn,921 props: mergeObjectOptions,922 emits: mergeObjectOptions,923 methods: mergeObjectOptions,924 computed: mergeObjectOptions,925 beforeCreate: mergeAsArray,926 created: mergeAsArray,927 beforeMount: mergeAsArray,928 mounted: mergeAsArray,929 beforeUpdate: mergeAsArray,930 updated: mergeAsArray,931 beforeDestroy: mergeAsArray,932 destroyed: mergeAsArray,933 activated: mergeAsArray,934 deactivated: mergeAsArray,935 errorCaptured: mergeAsArray,936 serverPrefetch: mergeAsArray,937 components: mergeObjectOptions,938 directives: mergeObjectOptions,939 watch: function mergeWatchOptions(e, t) {940 if (!e) return t;941 if (!t) return e;942 const n = b(Object.create(null), e);943 for (const r in t) n[r] = mergeAsArray(e[r], t[r]);944 return n945 },946 provide: mergeDataFn,947 inject: function mergeInject(e, t) {948 return mergeObjectOptions(normalizeInject(e), normalizeInject(t))949 }950};951function mergeDataFn(e, t) {952 return t ? e ? function mergedDataFn() {953 return b(isFunction(e) ? e.call(this, this) : e, isFunction(t) ? t.call(this, this) : t)954 } : t : e955}956function normalizeInject(e) {957 if (w(e)) {958 const t = {};959 for (let n = 0; n < e.length; n++) t[e[n]] = e[n];960 return t961 }962 return e963}964function mergeAsArray(e, t) {965 return e ? [...new Set([].concat(e, t))] : t966}967function mergeObjectOptions(e, t) {968 return e ? b(b(Object.create(null), e), t) : t969}970function initProps(e, t, n, r = !1) {971 const o = {}, s = {};972 def(s, Ue, 1), e.propsDefaults = Object.create(null), setFullProps(e, t, o, s);973 for (const a in e.propsOptions[0]) a in o || (o[a] = void 0);974 n ? e.props = r ? o : function shallowReactive(e) {975 return createReactiveObject(e, !1, q, Z, ne)976 }(o) : e.type.props ? e.props = o : e.props = s, e.attrs = s977}978function setFullProps(e, t, n, r) {979 const [o, s] = e.propsOptions;980 let a, i = !1;981 if (t) for (let l in t) {982 if (k(l)) continue;983 const c = t[l];984 let u;985 o && hasOwn(o, u = S(l)) ? s && s.includes(u) ? (a || (a = {}))[u] = c : n[u] = c : isEmitListener(e.emitsOptions, l) || c !== r[l] && (r[l] = c, i = !0)986 }987 if (s) {988 const t = toRaw(n), r = a || g;989 for (let a = 0; a < s.length; a++) {990 const i = s[a];991 n[i] = resolvePropValue(o, t, i, r[i], e, !hasOwn(r, i))992 }993 }994 return i995}996function resolvePropValue(e, t, n, r, o, s) {997 const a = e[n];998 if (null != a) {999 const e = hasOwn(a, "default");1000 if (e && void 0 === r) {1001 const e = a.default;1002 if (a.type !== Function && isFunction(e)) {1003 const {propsDefaults: s} = o;1004 n in s ? r = s[n] : (setCurrentInstance(o), r = s[n] = e.call(null, t), setCurrentInstance(null))1005 } else r = e1006 }1007 a[0] && (s && !e ? r = !1 : !a[1] || "" !== r && r !== C(n) || (r = !0))1008 }1009 return r1010}1011function normalizePropsOptions(e, t, n = !1) {1012 const r = t.propsCache, o = r.get(e);1013 if (o) return o;1014 const s = e.props, a = {}, i = [];1015 let l = !1;1016 if (!isFunction(e)) {1017 const extendProps = e => {1018 l = !0;1019 const [n, r] = normalizePropsOptions(e, t, !0);1020 b(a, n), r && i.push(...r)1021 };1022 !n && t.mixins.length && t.mixins.forEach(extendProps), e.extends && extendProps(e.extends), e.mixins && e.mixins.forEach(extendProps)1023 }1024 if (!s && !l) return r.set(e, v), v;1025 if (w(s)) for (let u = 0; u < s.length; u++) {1026 const e = S(s[u]);1027 validatePropName(e) && (a[e] = g)1028 } else if (s) for (const u in s) {1029 const e = S(u);1030 if (validatePropName(e)) {1031 const t = s[u], n = a[e] = w(t) || isFunction(t) ? {type: t} : t;1032 if (n) {1033 const t = getTypeIndex(Boolean, n.type), r = getTypeIndex(String, n.type);1034 n[0] = t > -1, n[1] = r < 0 || t < r, (t > -1 || hasOwn(n, "default")) && i.push(e)1035 }1036 }1037 }1038 const c = [a, i];1039 return r.set(e, c), c1040}1041function validatePropName(e) {1042 return "$" !== e[0]1043}1044function getType(e) {1045 const t = e && e.toString().match(/^\s*function (\w+)/);1046 return t ? t[1] : ""1047}1048function isSameType(e, t) {1049 return getType(e) === getType(t)1050}1051function getTypeIndex(e, t) {1052 return w(t) ? t.findIndex((t => isSameType(t, e))) : isFunction(t) && isSameType(t, e) ? 0 : -11053}1054const isInternalKey = e => "_" === e[0] || "$stable" === e,1055 normalizeSlotValue = e => w(e) ? e.map(normalizeVNode) : [normalizeVNode(e)], normalizeSlot$1 = (e, t, n) => {1056 const r = withCtx((e => normalizeSlotValue(t(e))), n);1057 return r._c = !1, r1058 }, normalizeObjectSlots = (e, t, n) => {1059 const r = e._ctx;1060 for (const o in e) {1061 if (isInternalKey(o)) continue;1062 const n = e[o];1063 if (isFunction(n)) t[o] = normalizeSlot$1(0, n, r); else if (null != n) {1064 const e = normalizeSlotValue(n);1065 t[o] = () => e1066 }1067 }1068 }, normalizeVNodeSlots = (e, t) => {1069 const n = normalizeSlotValue(t);1070 e.slots.default = () => n1071 };1072function withDirectives(e, t) {1073 if (null === be) return e;1074 const n = be.proxy, r = e.dirs || (e.dirs = []);1075 for (let o = 0; o < t.length; o++) {1076 let [e, s, a, i = g] = t[o];1077 isFunction(e) && (e = {mounted: e, updated: e}), r.push({1078 dir: e,1079 instance: n,1080 value: s,1081 oldValue: void 0,1082 arg: a,1083 modifiers: i1084 })1085 }1086 return e1087}1088function invokeDirectiveHook(e, t, n, r) {1089 const o = e.dirs, s = t && t.dirs;1090 for (let a = 0; a < o.length; a++) {1091 const i = o[a];1092 s && (i.oldValue = s[a].value);1093 let l = i.dir[r];1094 l && (pauseTracking(), callWithAsyncErrorHandling(l, n, 8, [e.el, i, e, t]), resetTracking())1095 }1096}1097function createAppContext() {1098 return {1099 app: null,1100 config: {1101 isNativeTag: NO,1102 performance: !1,1103 globalProperties: {},1104 optionMergeStrategies: {},1105 errorHandler: void 0,1106 warnHandler: void 0,1107 compilerOptions: {}1108 },1109 mixins: [],1110 components: {},1111 directives: {},1112 provides: Object.create(null),1113 optionsCache: new WeakMap,1114 propsCache: new WeakMap,1115 emitsCache: new WeakMap1116 }1117}1118let Ne = 0;1119function createAppAPI(e, t) {1120 return function createApp2(n, r = null) {1121 null == r || isObject(r) || (r = null);1122 const o = createAppContext(), s = new Set;1123 let a = !1;1124 const i = o.app = {1125 _uid: Ne++,1126 _component: n,1127 _props: r,1128 _container: null,1129 _context: o,1130 _instance: null,1131 version: Ze,1132 get config() {1133 return o.config1134 },1135 set config(e) {1136 },1137 use: (e, ...t) => (s.has(e) || (e && isFunction(e.install) ? (s.add(e), e.install(i, ...t)) : isFunction(e) && (s.add(e), e(i, ...t))), i),1138 mixin: e => (o.mixins.includes(e) || o.mixins.push(e), i),1139 component: (e, t) => t ? (o.components[e] = t, i) : o.components[e],1140 directive: (e, t) => t ? (o.directives[e] = t, i) : o.directives[e],1141 mount(s, l, c) {1142 if (!a) {1143 const u = De(n, r);1144 return u.appContext = o, l && t ? t(u, s) : e(u, s, c), a = !0, i._container = s, s.__vue_app__ = i, u.component.proxy1145 }1146 },1147 unmount() {1148 a && (e(null, i._container), delete i._container.__vue_app__)1149 },1150 provide: (e, t) => (o.provides[e] = t, i)1151 };1152 return i1153 }1154}1155const Ie = {scheduler: queueJob, allowRecurse: !0}, Me = function queueEffectWithSuspense(e, t) {1156 t && t.pendingBranch ? w(e) ? t.effects.push(...e) : t.effects.push(e) : function queuePostFlushCb(e) {1157 queueCb(e, he, de, me)1158 }(e)1159}, setRef = (e, t, n, r, o = !1) => {1160 if (w(e)) return void e.forEach(((e, s) => setRef(e, t && (w(t) ? t[s] : t), n, r, o)));1161 if (isAsyncWrapper(r) && !o) return;1162 const s = 4 & r.shapeFlag ? r.component.exposed || r.component.proxy : r.el, a = o ? null : s, {i, r: l} = e,1163 c = t && t.r, u = i.refs === g ? i.refs = {} : i.refs, f = i.setupState;1164 if (null != c && c !== l && (isString$1(c) ? (u[c] = null, hasOwn(f, c) && (f[c] = null)) : isRef(c) && (c.value = null)), isString$1(l)) {1165 const doSet = () => {1166 u[l] = a, hasOwn(f, l) && (f[l] = a)1167 };1168 a ? (doSet.id = -1, Me(doSet, n)) : doSet()1169 } else if (isRef(l)) {1170 const doSet = () => {1171 l.value = a1172 };1173 a ? (doSet.id = -1, Me(doSet, n)) : doSet()1174 } else isFunction(l) && callWithErrorHandling(l, i, 12, [a, u])1175};1176function createRenderer(e) {1177 return function baseCreateRenderer(e, t) {1178 const {1179 insert: n,1180 remove: r,1181 patchProp: o,1182 forcePatchProp: s,1183 createElement: a,1184 createText: i,1185 createComment: l,1186 setText: c,1187 setElementText: u,1188 parentNode: f,1189 nextSibling: p,1190 setScopeId: d = NOOP,1191 cloneNode: m,1192 insertStaticContent: y1193 } = e, patch = (e, t, n, r = null, o = null, s = null, a = !1, i = null, l = !1) => {1194 e && !isSameVNodeType(e, t) && (r = getNextHostNode(e), unmount(e, o, s, !0), e = null), -2 === t.patchFlag && (l = !1, t.dynamicChildren = null);1195 const {type: c, ref: u, shapeFlag: f} = t;1196 switch (c) {1197 case Ve:1198 processText(e, t, n, r);1199 break;1200 case He:1201 processCommentNode(e, t, n, r);1202 break;1203 case Be:1204 null == e && mountStaticNode(t, n, r, a);1205 break;1206 case Le:1207 processFragment(e, t, n, r, o, s, a, i, l);1208 break;1209 default:1210 1 & f ? processElement(e, t, n, r, o, s, a, i, l) : 6 & f ? processComponent(e, t, n, r, o, s, a, i, l) : (64 & f || 128 & f) && c.process(e, t, n, r, o, s, a, i, l, R)1211 }1212 null != u && o && setRef(u, e && e.ref, s, t || e, !t)1213 }, processText = (e, t, r, o) => {1214 if (null == e) n(t.el = i(t.children), r, o); else {1215 const n = t.el = e.el;1216 t.children !== e.children && c(n, t.children)1217 }1218 }, processCommentNode = (e, t, r, o) => {1219 null == e ? n(t.el = l(t.children || ""), r, o) : t.el = e.el1220 }, mountStaticNode = (e, t, n, r) => {1221 [e.el, e.anchor] = y(e.children, t, n, r, e.el && [e.el, e.anchor])1222 }, moveStaticNode = ({el: e, anchor: t}, r, o) => {1223 let s;1224 for (; e && e !== t;) s = p(e), n(e, r, o), e = s;1225 n(t, r, o)1226 }, removeStaticNode = ({el: e, anchor: t}) => {1227 let n;1228 for (; e && e !== t;) n = p(e), r(e), e = n;1229 r(t)1230 }, processElement = (e, t, n, r, o, s, a, i, l) => {1231 a = a || "svg" === t.type, null == e ? mountElement(t, n, r, o, s, a, i, l) : patchElement(e, t, o, s, a, i, l)1232 }, mountElement = (e, t, r, s, i, l, c, f) => {1233 let p, d;1234 const {type: g, props: v, shapeFlag: y, transition: b, patchFlag: R, dirs: w} = e;1235 if (e.el && void 0 !== m && -1 === R) p = e.el = m(e.el); else {1236 if (p = e.el = a(e.type, l, v && v.is, v), 8 & y ? u(p, e.children) : 16 & y && mountChildren(e.children, p, null, s, i, l && "foreignObject" !== g, c, f || !!e.dynamicChildren), w && invokeDirectiveHook(e, null, s, "created"), v) {1237 for (const t in v) k(t) || o(p, t, null, v[t], l, e.children, s, i, unmountChildren);1238 (d = v.onVnodeBeforeMount) && invokeVNodeHook(d, s, e)1239 }1240 setScopeId(p, e, e.scopeId, c, s)1241 }1242 w && invokeDirectiveHook(e, null, s, "beforeMount");1243 const _ = (!i || i && !i.pendingBranch) && b && !b.persisted;1244 _ && b.beforeEnter(p), n(p, t, r), ((d = v && v.onVnodeMounted) || _ || w) && Me((() => {1245 d && invokeVNodeHook(d, s, e), _ && b.enter(p), w && invokeDirectiveHook(e, null, s, "mounted")1246 }), i)1247 }, setScopeId = (e, t, n, r, o) => {1248 if (n && d(e, n), r) for (let s = 0; s < r.length; s++) d(e, r[s]);1249 if (o) {1250 if (t === o.subTree) {1251 const t = o.vnode;1252 setScopeId(e, t, t.scopeId, t.slotScopeIds, o.parent)1253 }1254 }1255 }, mountChildren = (e, t, n, r, o, s, a, i, l = 0) => {1256 for (let c = l; c < e.length; c++) {1257 const l = e[c] = i ? cloneIfMounted(e[c]) : normalizeVNode(e[c]);1258 patch(null, l, t, n, r, o, s, a, i)1259 }1260 }, patchElement = (e, t, n, r, a, i, l) => {1261 const c = t.el = e.el;1262 let {patchFlag: f, dynamicChildren: p, dirs: d} = t;1263 f |= 16 & e.patchFlag;1264 const m = e.props || g, v = t.props || g;1265 let y;1266 if ((y = v.onVnodeBeforeUpdate) && invokeVNodeHook(y, n, t, e), d && invokeDirectiveHook(t, e, n, "beforeUpdate"), f > 0) {1267 if (16 & f) patchProps(c, t, m, v, n, r, a); else if (2 & f && m.class !== v.class && o(c, "class", null, v.class, a), 4 & f && o(c, "style", m.style, v.style, a), 8 & f) {1268 const i = t.dynamicProps;1269 for (let t = 0; t < i.length; t++) {1270 const l = i[t], u = m[l], f = v[l];1271 (f !== u || s && s(c, l)) && o(c, l, u, f, a, e.children, n, r, unmountChildren)1272 }1273 }1274 1 & f && e.children !== t.children && u(c, t.children)1275 } else l || null != p || patchProps(c, t, m, v, n, r, a);1276 const b = a && "foreignObject" !== t.type;1277 p ? patchBlockChildren(e.dynamicChildren, p, c, n, r, b, i) : l || patchChildren(e, t, c, null, n, r, b, i, !1), ((y = v.onVnodeUpdated) || d) && Me((() => {1278 y && invokeVNodeHook(y, n, t, e), d && invokeDirectiveHook(t, e, n, "updated")1279 }), r)1280 }, patchBlockChildren = (e, t, n, r, o, s, a) => {1281 for (let i = 0; i < t.length; i++) {1282 const l = e[i], c = t[i],1283 u = l.el && (l.type === Le || !isSameVNodeType(l, c) || 6 & l.shapeFlag || 64 & l.shapeFlag) ? f(l.el) : n;1284 patch(l, c, u, null, r, o, s, a, !0)1285 }1286 }, patchProps = (e, t, n, r, a, i, l) => {1287 if (n !== r) {1288 for (const c in r) {1289 if (k(c)) continue;1290 const u = r[c], f = n[c];1291 (u !== f || s && s(e, c)) && o(e, c, f, u, l, t.children, a, i, unmountChildren)1292 }1293 if (n !== g) for (const s in n) k(s) || s in r || o(e, s, n[s], null, l, t.children, a, i, unmountChildren)1294 }1295 }, processFragment = (e, t, r, o, s, a, l, c, u) => {1296 const f = t.el = e ? e.el : i(""), p = t.anchor = e ? e.anchor : i("");1297 let {patchFlag: d, dynamicChildren: m, slotScopeIds: g} = t;1298 m && (u = !0), g && (c = c ? c.concat(g) : g), null == e ? (n(f, r, o), n(p, r, o), mountChildren(t.children, r, p, s, a, l, c, u)) : d > 0 && 64 & d && m && e.dynamicChildren ? (patchBlockChildren(e.dynamicChildren, m, r, s, a, l, c), (null != t.key || s && t === s.subTree) && traverseStaticChildren(e, t, !0)) : patchChildren(e, t, r, p, s, a, l, c, u)1299 }, processComponent = (e, t, n, r, o, s, a, i, l) => {1300 t.slotScopeIds = i, null == e ? 512 & t.shapeFlag ? o.ctx.activate(t, n, r, a, l) : mountComponent(t, n, r, o, s, a, l) : updateComponent(e, t, l)1301 }, mountComponent = (e, t, n, r, o, s, a) => {1302 const i = e.component = function createComponentInstance(e, t, n) {1303 const r = e.type, o = (t ? t.appContext : e.appContext) || Qe, s = {1304 uid: Je++,1305 vnode: e,1306 type: r,1307 parent: t,1308 appContext: o,1309 root: null,1310 next: null,1311 subTree: null,1312 update: null,1313 render: null,1314 proxy: null,1315 exposed: null,1316 withProxy: null,1317 effects: null,1318 provides: t ? t.provides : Object.create(o.provides),1319 accessCache: null,1320 renderCache: [],1321 components: null,1322 directives: null,1323 propsOptions: normalizePropsOptions(r, o),1324 emitsOptions: normalizeEmitsOptions(r, o),1325 emit: null,1326 emitted: null,1327 propsDefaults: g,1328 inheritAttrs: r.inheritAttrs,1329 ctx: g,1330 data: g,1331 props: g,1332 attrs: g,1333 slots: g,1334 refs: g,1335 setupState: g,1336 setupContext: null,1337 suspense: n,1338 suspenseId: n ? n.pendingId : 0,1339 asyncDep: null,1340 asyncResolved: !1,1341 isMounted: !1,1342 isUnmounted: !1,1343 isDeactivated: !1,1344 bc: null,1345 c: null,1346 bm: null,1347 m: null,1348 bu: null,1349 u: null,1350 um: null,1351 bum: null,1352 da: null,1353 a: null,1354 rtg: null,1355 rtc: null,1356 ec: null,1357 sp: null1358 };1359 return s.ctx = {_: s}, s.root = t ? t.root : s, s.emit = emit.bind(null, s), s1360 }(e, r, o);1361 if (isKeepAlive(e) && (i.ctx.renderer = R), function setupComponent(e, t = !1) {1362 Xe = t;1363 const {props: n, children: r} = e.vnode, o = isStatefulComponent(e);1364 initProps(e, n, o, t), ((e, t) => {1365 if (32 & e.vnode.shapeFlag) {1366 const n = t._;1367 n ? (e.slots = toRaw(t), def(t, "_", n)) : normalizeObjectSlots(t, e.slots = {})1368 } else e.slots = {}, t && normalizeVNodeSlots(e, t);1369 def(e.slots, Ue, 1)1370 })(e, r);1371 const s = o ? function setupStatefulComponent(e, t) {1372 const n = e.type;1373 e.accessCache = Object.create(null), e.proxy = function markRaw(e) {1374 return def(e, "__v_skip", !0), e1375 }(new Proxy(e.ctx, qe));1376 const {setup: r} = n;1377 if (r) {1378 const n = e.setupContext = r.length > 1 ? function createSetupContext(e) {1379 const expose = t => {1380 e.exposed = proxyRefs(t)1381 };1382 return {attrs: e.attrs, slots: e.slots, emit: e.emit, expose}1383 }(e) : null;1384 Ye = e, pauseTracking();1385 const o = callWithErrorHandling(r, e, 0, [e.props, n]);1386 if (resetTracking(), Ye = null, isPromise(o)) {1387 if (t) return o.then((t => {1388 handleSetupResult(e, t)1389 })).catch((t => {1390 handleError(t, e, 0)1391 }));1392 e.asyncDep = o1393 } else handleSetupResult(e, o)1394 } else finishComponentSetup(e)1395 }(e, t) : void 0;1396 return Xe = !1, s1397 }(i), i.asyncDep) {1398 if (o && o.registerDep(i, setupRenderEffect), !e.el) {1399 const e = i.subTree = De(He);1400 processCommentNode(null, e, t, n)1401 }1402 } else setupRenderEffect(i, e, t, n, o, s, a)1403 }, updateComponent = (e, t, n) => {1404 const r = t.component = e.component;1405 if (function shouldUpdateComponent(e, t, n) {1406 const {props: r, children: o, component: s} = e, {props: a, children: i, patchFlag: l} = t, c = s.emitsOptions;1407 if (t.dirs || t.transition) return !0;1408 if (!(n && l >= 0)) return !(!o && !i || i && i.$stable) || r !== a && (r ? !a || hasPropsChanged(r, a, c) : !!a);1409 if (1024 & l) return !0;1410 if (16 & l) return r ? hasPropsChanged(r, a, c) : !!a;1411 if (8 & l) {1412 const e = t.dynamicProps;1413 for (let t = 0; t < e.length; t++) {1414 const n = e[t];1415 if (a[n] !== r[n] && !isEmitListener(c, n)) return !01416 }1417 }1418 return !11419 }(e, t, n)) {1420 if (r.asyncDep && !r.asyncResolved) return void updateComponentPreRender(r, t, n);1421 r.next = t, function invalidateJob(e) {1422 const t = le.indexOf(e);1423 t > ce && le.splice(t, 1)1424 }(r.update), r.update()1425 } else t.component = e.component, t.el = e.el, r.vnode = t1426 }, setupRenderEffect = (e, t, n, r, o, s, a) => {1427 e.update = effect((function componentEffect() {1428 if (e.isMounted) {1429 let t, {next: n, bu: r, u: i, parent: l, vnode: c} = e, u = n;...
index.147aad71.js
Source:index.147aad71.js
...1064 extend(normalized, raw);1065 }1066 return comp.__emits = normalized;1067}1068function isEmitListener(options, key) {1069 if (!options || !isOn(key)) {1070 return false;1071 }1072 key = key.replace(/Once$/, "");1073 return hasOwn(options, key[2].toLowerCase() + key.slice(3)) || hasOwn(options, key.slice(2));1074}1075let currentRenderingInstance = null;1076function setCurrentRenderingInstance(instance) {1077 currentRenderingInstance = instance;1078}1079let accessedAttrs = false;1080function markAttrsAccessed() {1081 accessedAttrs = true;1082}1083function renderComponentRoot(instance) {1084 const {type: Component, vnode, proxy, withProxy, props, propsOptions: [propsOptions], slots, attrs, emit: emit2, render: render2, renderCache, data, setupState, ctx} = instance;1085 let result;1086 currentRenderingInstance = instance;1087 try {1088 let fallthroughAttrs;1089 if (vnode.shapeFlag & 4) {1090 const proxyToUse = withProxy || proxy;1091 result = normalizeVNode(render2.call(proxyToUse, proxyToUse, renderCache, props, setupState, data, ctx));1092 fallthroughAttrs = attrs;1093 } else {1094 const render3 = Component;1095 if (false)1096 ;1097 result = normalizeVNode(render3.length > 1 ? render3(props, {attrs, slots, emit: emit2}) : render3(props, null));1098 fallthroughAttrs = Component.props ? attrs : getFunctionalFallthrough(attrs);1099 }1100 let root = result;1101 let setRoot = void 0;1102 if (false)1103 ;1104 if (Component.inheritAttrs !== false && fallthroughAttrs) {1105 const keys = Object.keys(fallthroughAttrs);1106 const {shapeFlag} = root;1107 if (keys.length) {1108 if (shapeFlag & 1 || shapeFlag & 6) {1109 if (propsOptions && keys.some(isModelListener)) {1110 fallthroughAttrs = filterModelListeners(fallthroughAttrs, propsOptions);1111 }1112 root = cloneVNode(root, fallthroughAttrs);1113 } else if (false)1114 ;1115 }1116 }1117 if (vnode.dirs) {1118 if (false)1119 ;1120 root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs;1121 }1122 if (vnode.transition) {1123 if (false)1124 ;1125 root.transition = vnode.transition;1126 }1127 if (false)1128 ;1129 else {1130 result = root;1131 }1132 } catch (err) {1133 handleError(err, instance, 1);1134 result = createVNode(Comment);1135 }1136 currentRenderingInstance = null;1137 return result;1138}1139const getChildRoot = (vnode) => {1140 if (vnode.type !== Fragment) {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 }1290}1291let isRenderingCompiledSlot = 0;1292const setCompiledSlotRendering = (n) => isRenderingCompiledSlot += n;1293function renderSlot(slots, name, props = {}, fallback) {1294 let slot = slots[name];1295 isRenderingCompiledSlot++;1296 const rendered = (openBlock(), createBlock(Fragment, {key: props.key}, slot ? slot(props) : fallback ? fallback() : [], slots._ === 1 ? 64 : -2));1297 isRenderingCompiledSlot--;1298 return rendered;1299}1300function withCtx(fn, ctx = currentRenderingInstance) {1301 if (!ctx)1302 return fn;1303 const renderFnWithContext = (...args) => {1304 if (!isRenderingCompiledSlot) {1305 openBlock(true);1306 }1307 const owner = currentRenderingInstance;1308 setCurrentRenderingInstance(ctx);1309 const res = fn(...args);1310 setCurrentRenderingInstance(owner);1311 if (!isRenderingCompiledSlot) {1312 closeBlock();1313 }1314 return res;1315 };1316 renderFnWithContext._c = true;1317 return renderFnWithContext;1318}1319let currentScopeId = null;1320function initProps(instance, rawProps, isStateful, isSSR = false) {1321 const props = {};1322 const attrs = {};1323 def(attrs, InternalObjectKey, 1);1324 setFullProps(instance, rawProps, props, attrs);1325 if (isStateful) {1326 instance.props = isSSR ? props : shallowReactive(props);1327 } else {1328 if (!instance.type.props) {1329 instance.props = attrs;1330 } else {1331 instance.props = props;1332 }1333 }1334 instance.attrs = attrs;1335}1336function updateProps(instance, rawProps, rawPrevProps, optimized) {1337 const {props, attrs, vnode: {patchFlag}} = instance;1338 const rawCurrentProps = toRaw(props);1339 const [options] = instance.propsOptions;1340 if ((optimized || patchFlag > 0) && !(patchFlag & 16)) {1341 if (patchFlag & 8) {1342 const propsToUpdate = instance.vnode.dynamicProps;1343 for (let i = 0; i < propsToUpdate.length; i++) {1344 const key = propsToUpdate[i];1345 const value = rawProps[key];1346 if (options) {1347 if (hasOwn(attrs, key)) {1348 attrs[key] = value;1349 } else {1350 const camelizedKey = camelize(key);1351 props[camelizedKey] = resolvePropValue(options, rawCurrentProps, camelizedKey, value, instance);1352 }1353 } else {1354 attrs[key] = value;1355 }1356 }1357 }1358 } else {1359 setFullProps(instance, rawProps, props, attrs);1360 let kebabKey;1361 for (const key in rawCurrentProps) {1362 if (!rawProps || !hasOwn(rawProps, key) && ((kebabKey = hyphenate(key)) === key || !hasOwn(rawProps, kebabKey))) {1363 if (options) {1364 if (rawPrevProps && (rawPrevProps[key] !== void 0 || rawPrevProps[kebabKey] !== void 0)) {1365 props[key] = resolvePropValue(options, rawProps || EMPTY_OBJ, key, void 0, instance);1366 }1367 } else {1368 delete props[key];1369 }1370 }1371 }1372 if (attrs !== rawCurrentProps) {1373 for (const key in attrs) {1374 if (!rawProps || !hasOwn(rawProps, key)) {1375 delete attrs[key];1376 }1377 }1378 }1379 }1380 trigger(instance, "set", "$attrs");1381}1382function setFullProps(instance, rawProps, props, attrs) {1383 const [options, needCastKeys] = instance.propsOptions;1384 if (rawProps) {1385 for (const key in rawProps) {1386 const value = rawProps[key];1387 if (isReservedProp(key)) {1388 continue;1389 }1390 let camelKey;1391 if (options && hasOwn(options, camelKey = camelize(key))) {1392 props[camelKey] = value;1393 } else if (!isEmitListener(instance.emitsOptions, key)) {1394 attrs[key] = value;1395 }1396 }1397 }1398 if (needCastKeys) {1399 const rawCurrentProps = toRaw(props);1400 for (let i = 0; i < needCastKeys.length; i++) {1401 const key = needCastKeys[i];1402 props[key] = resolvePropValue(options, rawCurrentProps, key, rawCurrentProps[key], instance);1403 }1404 }1405}1406function resolvePropValue(options, props, key, value, instance) {1407 const opt = options[key];...
render.js
Source:render.js
...1946 const dynamicProps = nextVNode.dynamicProps;1947 for (let i = 0; i < dynamicProps.length; i++) {1948 const key = dynamicProps[i];1949 if (nextProps[key] !== prevProps[key] &&1950 !isEmitListener(emits, key)) {1951 return true;1952 }1953 }1954 }1955 }1956 else {1957 // this path is only taken by manually written render functions1958 // so presence of any children leads to a forced update1959 if (prevChildren || nextChildren) {1960 if (!nextChildren || !nextChildren.$stable) {1961 return true;1962 }1963 }1964 if (prevProps === nextProps) {1965 return false;1966 }1967 if (!prevProps) {1968 return !!nextProps;1969 }1970 if (!nextProps) {1971 return true;1972 }1973 return hasPropsChanged(prevProps, nextProps, emits);1974 }1975 return false;1976 }1977 function hasPropsChanged(prevProps, nextProps, emitsOptions) {1978 const nextKeys = Object.keys(nextProps);1979 if (nextKeys.length !== Object.keys(prevProps).length) {1980 return true;1981 }1982 for (let i = 0; i < nextKeys.length; i++) {1983 const key = nextKeys[i];1984 if (nextProps[key] !== prevProps[key] &&1985 !isEmitListener(emitsOptions, key)) {1986 return true;1987 }1988 }1989 return false;1990 }1991 // Check if an incoming prop key is a declared emit event listener.1992 // e.g. With `emits: { click: null }`, props named `onClick` and `onclick` are1993 // both considered matched listeners.1994 function isEmitListener(options, key) {1995 if (!options || !isOn(key)) {1996 return false;1997 }1998 key = key.replace(/Once$/, '');1999 return (hasOwn(options, key[2].toLowerCase() + key.slice(3)) ||2000 hasOwn(options, key.slice(2)));2001 }2002 function invalidateJob(job) {2003 const i = queue.indexOf(job);2004 if (i > -1) {2005 queue[i] = null;2006 }2007 }2008/*...
shouldComponentUpdate.js
Source:shouldComponentUpdate.js
...83 const dynamicProps = nextVNode.dynamicProps;84 for (let i = 0; i < dynamicProps.length; i++) {85 const key = dynamicProps[i];86 if (nextProps[key] !== prevProps[key] &&87 !isEmitListener(emits, key)) {88 return true;89 }90 }91 }92 }93 else {94 // this path is only taken by manually written render functions95 // so presence of any children leads to a forced update96 if (prevChildren || nextChildren) {97 if (!nextChildren || !nextChildren.$stable) {98 return true;99 }100 }101 if (prevProps === nextProps) {102 return false;103 }104 if (!prevProps) {105 return !!nextProps;106 }107 if (!nextProps) {108 return true;109 }110 return hasPropsChanged(prevProps, nextProps, emits);111 }112 return false;113}114 function hasPropsChanged(prevProps, nextProps, emitsOptions) {115 const nextKeys = Object.keys(nextProps);116 if (nextKeys.length !== Object.keys(prevProps).length) {117 return true;118 }119 for (let i = 0; i < nextKeys.length; i++) {120 const key = nextKeys[i];121 if (nextProps[key] !== prevProps[key] &&122 !isEmitListener(emitsOptions, key)) {123 return true;124 }125 }126 return false;127 }128 /* FULL_PROPS */129 /*130 * hasDynamicKeys = true;131 * !isStaticExp(key)132 */133 function buildProps(node, context, props = node.props, ssr = false) {134 const { tag, loc: elementLoc } = node;135 const isComponent = node.tagType === 1 /* COMPONENT */;136 let properties = [];...
componentProps.js
Source:componentProps.js
...153 props[camelKey] = value154 } else {155 ;(rawCastValues || (rawCastValues = {}))[camelKey] = value156 }157 } else if (!isEmitListener(instance.emitsOptions, key)) {158 if (!(key in attrs) || value !== attrs[key]) {159 attrs[key] = value160 hasAttrsChanged = true161 }162 }163 }164 }165 if (needCastKeys) {166 const rawCurrentProps = toRaw(props)167 const castValues = rawCastValues || EMPTY_OBJ168 for (let i = 0; i < needCastKeys.length; i++) {169 const key = needCastKeys[i]170 props[key] = resolvePropValue(171 options,...
componentRenderUtils.js
Source:componentRenderUtils.js
...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 }...
componentEmits.js
Source:componentEmits.js
1import {2 isFunction,3 isArray,4 isOn,5 hasOwn,6 EMPTY_OBJ,7 toHandlerKey,8 camelize9} from '../shared/index.js'10export function emit (instance, event, ...rawArgs) {11 const props = instance.vnode.props || EMPTY_OBJ12 let args = rawArgs13 const isModelListener = event.startsWith('update:')14 // for v-model update:xxx events, apply modifiers on args15 const modelArg = isModelListener && event.slice(7)16 if (modelArg && modelArg in props) {17 const modifiersKey = `${18 modelArg === 'modelValue' ? 'model' : modelArg19 }Modifiers`20 const { number, trim } = props[modifiersKey] || EMPTY_OBJ21 if (trim) {22 args = rawArgs.map(a => a.trim())23 } else if (number) {24 args = rawArgs.map(toNumber)25 }26 }27 let handlerName28 let handler =29 props[(handlerName = toHandlerKey(event))] ||30 // also try camelCase event handler (#2249)31 props[(handlerName = toHandlerKey(camelize(event)))]32 // for v-model update:xxx events, also trigger kebab-case equivalent33 // for props passed via kebab-case34 if (!handler && isModelListener) {35 handler = props[(handlerName = toHandlerKey(hyphenate(event)))]36 }37 if (handler) {38 handler([...args])39 }40 const onceHandler = props[handlerName + `Once`]41 if (onceHandler) {42 if (!instance.emitted) {43 instance.emitted = {}44 } else if (instance.emitted[handlerName]) {45 return46 }47 instance.emitted[handlerName] = true48 onceHandler(args)49 }50}51export function normalizeEmitsOptions (comp, appContext, asMixin = false) {52 const cache = appContext.emitsCache53 const cached = cache.get(comp)54 if (cached !== undefined) {55 return cached56 }57 const raw = comp.emits58 let normalized = {}59 // apply mixin/extends props60 let hasExtends = false61 if (!isFunction(comp)) {62 const extendEmits = raw => {63 const normalizedFromExtend = normalizeEmitsOptions(raw, appContext, true)64 if (normalizedFromExtend) {65 hasExtends = true66 extend(normalized, normalizedFromExtend)67 }68 }69 if (!asMixin && appContext.mixins.length) {70 appContext.mixins.forEach(extendEmits)71 }72 if (comp.extends) {73 extendEmits(comp.extends)74 }75 if (comp.mixins) {76 comp.mixins.forEach(extendEmits)77 }78 }79 if (!raw && !hasExtends) {80 cache.set(comp, null)81 return null82 }83 if (isArray(raw)) {84 raw.forEach(key => (normalized[key] = null))85 } else {86 extend(normalized, raw)87 }88 cache.set(comp, normalized)89 return normalized90}91export function isEmitListener (options, key) {92 if (!options || !isOn(key)) {93 return false94 }95 key = key.slice(2).replace(/Once$/, '')96 return (97 hasOwn(options, key[0].toLowerCase() + key.slice(1)) || hasOwn(options, key)98 )...
Using AI Code Generation
1const { isEmitListener } = require('playwright/lib/utils/utils');2const { chromium } = require('playwright');3(async () => {4 const browser = await chromium.launch();5 const context = await browser.newContext();6 const page = await context.newPage();7 const [request] = await Promise.all([8 page.waitForEvent('request'),9 ]);10 console.log(isEmitListener(request, 'requestfailed'));11 console.log(isEmitListener(request, 'requestfinished'));12 await browser.close();13})();
Using AI Code Generation
1const { InternalEventEmitter } = require('playwright/lib/utils/events');2const emitter = new InternalEventEmitter();3const listener = () => {};4emitter.on('event', listener);5const { InternalEventEmitter } = require('playwright/lib/utils/events');6const emitter = new InternalEventEmitter();7const listener = () => {};8emitter.on('event', listener);9import { PlaywrightTestConfig } from '@playwright/test';10const config: PlaywrightTestConfig = {11 use: {12 viewport: { width: 1280, height: 720 },13 },14};15export default config;16{17 "scripts": {18 },19 "dependencies": {20 }21}22const { InternalEventEmitter } = require('playwright/lib/utils/events');23console.log(require.resolve('playwright/lib/utils/events'));24import { PlaywrightTestConfig } from '@playwright/test';25const config: PlaywrightTestConfig = {26 use: {27 viewport: { width: 1280,
Using AI Code Generation
1const { InternalEventEmitter } = require('playwright/lib/utils/events');2const emitter = new InternalEventEmitter();3emitter.on('event', () => {});4emitter.on('event', () => {}, true);5emitter.on('event', () => {}, false);6emitter.on('event', () => {}, undefined);7emitter.on('event', () => {}, null);8emitter.on('event', () => {}, 'true');9emitter.on('event', () => {}, 'false');10emitter.on('event', () => {}, 'random');11emitter.on('event', () => {}, 1);12emitter.on('event', () => {}, 0);13emitter.on('event', () => {}, 2);14emitter.on('event', () => {}, {});15emitter.on('event', () => {}, []);16emitter.on('event', () => {}, () => {});17emitter.on('event', () => {}, 0.5);18emitter.on('event', () => {}, 0.0);19emitter.on('event', () => {}, 0.9);20emitter.on('event', () => {}, -0.5);21emitter.on('event', () =>
Using AI Code Generation
1const { InternalEventEmitter } = require('playwright/lib/utils/events');2const { helper } = require('playwright/lib/helper');3const { events } = require('playwright/lib/events');4const emitter = new InternalEventEmitter();5events.forEach(event => {6 emitter.on(event, () => console.log(event));7});8console.log(emitter.isEmitListener('event1', () => console.log('event1')));9helper.addEventListener(emitter, 'event1', () => console.log('event1'));10console.log(emitter.isEmitListener('event1', () => console.log('event1')));11console.log(emitter.isEmitListener('event1', () => console.log('event2')));12console.log(emitter.isEmitListener('event2', () => console.log('event1')));13console.log(emitter.isEmitListener('event1', () => console.log('event3')));14console.log(emitter.isEmitListener('event1', () => console.log('event1')));15console.log(emitter.isEmitListener('event1', () => console.log('event2')));16console.log(emitter.isEmitListener('event2', () => console.log('event1')));17console.log(emitter.isEmitListener('event1', () => console.log('event3')));18console.log(emitter.isEmitListener('event1', () => console.log('event1')));19console.log(emitter.isEmitListener('event
Using AI Code Generation
1const { isEmitListener } = require('playwright/lib/helper');2const { Page } = require('playwright/lib/page');3const { ConsoleMessage } = require('playwright/lib/console');4const { assert } = require('console');5assert(isEmitListener(Page, 'console'), 'Page should have "console" event');6assert(isEmitListener(ConsoleMessage, 'text'), 'ConsoleMessage should have "text" event');7const page = await browser.newPage();8await page.route('**', route => route.continue());9await page.evaluate(() => console.log('hello', 5, {foo: 'bar'}));10await page.close();11assert(isEmitListener(Page, 'console'), 'Page should have "console" event');12assert(isEmitListener(ConsoleMessage, 'text'), 'ConsoleMessage should have "text" event');13const page = await browser.newPage();14await page.route('**', route => route.continue());15await page.evaluate(() => console.log('hello', 5, {foo: 'bar'}));16await page.close();17assert(isEmitListener(Page, 'console'), 'Page should have "console" event');18assert(isEmitListener(ConsoleMessage, 'text'), 'ConsoleMessage should have "text" event');19const page = await browser.newPage();20await page.route('**', route => route.continue());21await page.evaluate(() => console.log('hello', 5, {foo: 'bar'}));22await page.close();23assert(isEmitListener(Page, 'console'), 'Page should have "console" event');24assert(isEmitListener(ConsoleMessage, 'text'), 'ConsoleMessage should have "text" event');25const page = await browser.newPage();26await page.route('**', route => route.continue());27await page.evaluate(() => console.log('hello', 5, {foo:
Using AI Code Generation
1const { Playwright } = require('playwright-core');2console.log(Playwright.isEmitListener('page', 'console'));3const { Playwright } = require('playwright-core');4console.log(Playwright.isEmitListener('page', 'console'));5const { Playwright } = require('playwright-core');6console.log(Playwright.isEmitListener('page', 'console'));7const { Playwright } = require('playwright-core');8console.log(Playwright.isEmitListener('page', 'console'));9const { Playwright } = require('playwright-core');10console.log(Playwright.isEmitListener('page', 'console'));11const { Playwright } = require('playwright-core');12console.log(Playwright.isEmitListener('page', 'console'));13const { Playwright } = require('playwright-core');14console.log(Playwright.isEmitListener('page', 'console'));15const { Playwright } = require('playwright-core');16console.log(Playwright.isEmitListener('page', 'console'));17const { Playwright } = require('playwright-core');18console.log(Playwright.isEmitListener('page', 'console'));19const { Playwright } = require('playwright-core');20console.log(Playwright.isEmitListener('page', 'console'));
Using AI Code Generation
1const { isEmitListener } = require('playwright/lib/internal/inspectorInstrumentation');2const { chromium } = require('playwright');3(async () => {4 const browser = await chromium.launch();5 const context = await browser.newContext();6 const page = await context.newPage();7 const isEmitListenerAttached = isEmitListener(page, 'request');8 console.log('isEmitListenerAttached', isEmitListenerAttached);9 await browser.close();10})();
Using AI Code Generation
1const { isEmitListener } = require('playwright/lib/utils/events');2function emitEvent() {3 if (isEmitListener(this, 'myEvent')) {4 this.emit('myEvent');5 }6}7module.exports = { emitEvent };8const { emitEvent } = require('./test');9const { test } = require('@playwright/test');10test('test', async ({ page }) => {11 emitEvent.call(page, 'myEvent');12});
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!!