Best JavaScript code snippet using playwright-internal
index.js
Source:index.js
1'use strict';2var jsx = require('@babel/plugin-syntax-jsx').default;3var flags = require('./flags');4var t = require('@babel/types');5var svgAttributes = require('./attrsSVG');6var VNodeTypes = require('./vNodeTypes');7var VNodeFlags = flags.VNodeFlags;8var ChildFlags = flags.ChildFlags;9function isComponent(name) {10 var firstLetter = name.charAt(0);11 return firstLetter.toUpperCase() === firstLetter;12}13function isNullOrUndefined(obj) {14 return obj === undefined || obj === null;15}16function isFragment(name) {17 return name === 'Fragment' || name === 'Inferno.Fragment' || name === 'React.Fragment';18}19var NULL = t.identifier('null');20// All special attributes21var PROP_HasKeyedChildren = '$HasKeyedChildren';22var PROP_HasNonKeyedChildren = '$HasNonKeyedChildren';23var PROP_VNODE_CHILDREN = '$HasVNodeChildren';24var PROP_TEXT_CHILDREN = '$HasTextChildren';25var PROP_ReCreate = '$ReCreate';26var PROP_ChildFlag = '$ChildFlag';27var PROP_FLAGS = '$Flags';28var TYPE_ELEMENT = 0;29var TYPE_COMPONENT = 1;30var TYPE_FRAGMENT = 2;31function _stringLiteralTrimmer(lastNonEmptyLine, lineCount, line, i) {32 var isFirstLine = (i === 0);33 var isLastLine = (i === lineCount - 1);34 var isLastNonEmptyLine = (i === lastNonEmptyLine);35 // replace rendered whitespace tabs with spaces36 var trimmedLine = line.replace(/\t/g, ' ');37 // trim leading whitespace38 if (!isFirstLine) {39 trimmedLine = trimmedLine.replace(/^[ ]+/, '');40 }41 // trim trailing whitespace42 if (!isLastLine) {43 trimmedLine = trimmedLine.replace(/[ ]+$/, '');44 }45 if (trimmedLine.length > 0) {46 if (!isLastNonEmptyLine) {47 trimmedLine += ' ';48 }49 return trimmedLine;50 }51 return '';52}53function handleWhiteSpace(value) {54 var lines = value.split(/\r\n|\n|\r/);55 var lastNonEmptyLine = 0;56 for (var i = lines.length - 1; i > 0; i--) {57 if (lines[i].match(/[^ \t]/)) {58 lastNonEmptyLine = i;59 break;60 }61 }62 var str = lines63 .map(_stringLiteralTrimmer.bind(null, lastNonEmptyLine, lines.length))64 .filter(function (line) {65 return line.length > 0;66 })67 .join('');68 if (str.length > 0) {69 return str;70 }71 return '';72}73function jsxMemberExpressionReference(t, node) {74 if (t.isJSXIdentifier(node)) {75 return t.identifier(node.name);76 }77 if (t.isJSXMemberExpression(node)) {78 return t.memberExpression(79 jsxMemberExpressionReference(t, node.object),80 jsxMemberExpressionReference(t, node.property)81 );82 }83}84function getVNodeType(astNode) {85 var astType = astNode.type;86 var flags;87 var type;88 var vNodeType;89 if (astType === 'JSXIdentifier') {90 var astName = astNode.name;91 if (isFragment(astName)) {92 vNodeType = TYPE_FRAGMENT;93 } else if (isComponent(astName)) {94 vNodeType = TYPE_COMPONENT;95 type = t.identifier(astName);96 flags = VNodeFlags.ComponentUnknown;97 } else {98 vNodeType = TYPE_ELEMENT;99 type = t.StringLiteral(astName);100 flags = VNodeTypes[astName] || VNodeFlags.HtmlElement;101 }102 } else if (astType === 'JSXMemberExpression') {103 if (astNode.property.name === 'Fragment') {104 vNodeType = TYPE_FRAGMENT;105 } else {106 vNodeType = TYPE_COMPONENT;107 type = jsxMemberExpressionReference(t, astNode);108 flags = VNodeFlags.ComponentUnknown;109 }110 }111 return {112 type: type,113 vNodeType: vNodeType,114 flags: flags115 };116}117function getVNodeChildren(astChildren, opts, fileState, defineAll) {118 var children = [];119 var parentCanBeKeyed = false;120 var requiresNormalization = false;121 var foundText = false;122 for (var i = 0; i < astChildren.length; i++) {123 var child = astChildren[i];124 var vNode = createVNode(child, opts, fileState, defineAll);125 if (child.type === 'JSXExpressionContainer') {126 requiresNormalization = true;127 } else if (child.type === 'JSXText' && handleWhiteSpace(child.value) !== '') {128 foundText = true;129 }130 if (!isNullOrUndefined(vNode)) {131 children.push(vNode);132 /*133 * Loop direct children to check if they have key property set134 * If they do, flag parent as hasKeyedChildren to increase runtime performance of Inferno135 * When key already found within one of its children, they must all be keyed136 */137 if (parentCanBeKeyed === false && child.openingElement) {138 var astProps = child.openingElement.attributes;139 var len = astProps.length;140 while (parentCanBeKeyed === false && len-- > 0) {141 var prop = astProps[len];142 if (prop.name && prop.name.name === 'key') {143 parentCanBeKeyed = true;144 }145 }146 }147 }148 }149 var hasSingleChild = children.length === 1;150 children = hasSingleChild ? children[0] : t.arrayExpression(children);151 return {152 parentCanBeKeyed: !hasSingleChild && parentCanBeKeyed,153 children: children,154 foundText: foundText,155 parentCanBeNonKeyed: !hasSingleChild && !parentCanBeKeyed && !requiresNormalization && astChildren.length > 1,156 requiresNormalization: requiresNormalization,157 hasSingleChild: hasSingleChild158 };159}160function getValue(t, value) {161 if (!value) {162 return t.BooleanLiteral(true);163 }164 if (value.type === 'JSXExpressionContainer') {165 return value.expression;166 }167 return value;168}169function getName(t, name) {170 if (name.indexOf('-') !== 0) {171 return t.StringLiteral(name);172 }173 return t.identifier(name);174}175function getVNodeProps(astProps, isComponent) {176 var props = [];177 var key = null;178 var ref = null;179 var className = null;180 var hasTextChildren = false;181 var hasKeyedChildren = false;182 var hasNonKeyedChildren = false;183 var childrenKnown = false;184 var needsNormalization = false;185 var hasReCreateFlag = false;186 var propChildren = null;187 var childFlags = null;188 var flagsOverride = null;189 var contentEditable = false;190 for (var i = 0; i < astProps.length; i++) {191 var astProp = astProps[i];192 if (astProp.type === 'JSXSpreadAttribute') {193 needsNormalization = true;194 props.push({195 astName: null,196 astValue: null,197 astSpread: astProp.argument198 });199 } else {200 var propName = astProp.name;201 if (propName.type === 'JSXIdentifier') {202 propName = propName.name;203 } else if (propName.type === 'JSXNamespacedName') {204 propName = propName.namespace.name + ':' + propName.name.name;205 }206 if (!isComponent && (propName === 'className' || propName === 'class')) {207 className = getValue(t, astProp.value);208 } else if (!isComponent && (propName === 'htmlFor')) {209 props.push({210 astName: getName(t, 'for'),211 astValue: getValue(t, astProp.value),212 astSpread: null213 });214 } else if (!isComponent && (propName === 'onDoubleClick')) {215 props.push({216 astName: getName(t, 'onDblClick'),217 astValue: getValue(t, astProp.value),218 astSpread: null219 });220 } else if (propName.substr(0, 11) === 'onComponent' && isComponent) {221 if (!ref) {222 ref = t.ObjectExpression([]);223 }224 ref.properties.push(225 t.ObjectProperty(getName(t, propName), getValue(t, astProp.value))226 );227 } else if (!isComponent && propName in svgAttributes) {228 // React compatibility for SVG Attributes229 props.push({230 astName: getName(t, svgAttributes[propName]),231 astValue: getValue(t, astProp.value),232 astSpread: null233 });234 } else {235 switch (propName) {236 case PROP_ChildFlag:237 childrenKnown = true;238 childFlags = getValue(t, astProp.value);239 break;240 case PROP_VNODE_CHILDREN:241 childrenKnown = true;242 break;243 case PROP_FLAGS:244 flagsOverride = getValue(t, astProp.value);245 break;246 case PROP_TEXT_CHILDREN:247 childrenKnown = true;248 hasTextChildren = true;249 break;250 case PROP_HasNonKeyedChildren:251 childrenKnown = true;252 hasNonKeyedChildren = true;253 break;254 case PROP_HasKeyedChildren:255 childrenKnown = true;256 hasKeyedChildren = true;257 break;258 case 'ref':259 ref = getValue(t, astProp.value);260 break;261 case 'key':262 key = getValue(t, astProp.value);263 break;264 case PROP_ReCreate:265 hasReCreateFlag = true;266 break;267 default:268 if (propName === 'children') {269 propChildren = astProp;270 }271 if (propName.toLowerCase() === 'contenteditable') {272 contentEditable = true;273 }274 props.push({275 astName: getName(t, propName),276 astValue: getValue(t, astProp.value),277 astSpread: null278 });279 }280 }281 }282 }283 /* eslint no-return-assign:0 */284 return {285 props: isNullOrUndefined(props) ? NULL : props = t.ObjectExpression(286 props.map(function (prop) {287 if (prop.astSpread) {288 // Babel 6 uses 'SpreadProperty' and Babel 7 uses SpreadElement289 var SpreadOperator = 'SpreadProperty' in t.DEPRECATED_KEYS ? t.SpreadElement : t.SpreadProperty;290 return SpreadOperator(prop.astSpread);291 }292 return t.ObjectProperty(prop.astName, prop.astValue);293 })294 ),295 key: isNullOrUndefined(key) ? NULL : key,296 ref: isNullOrUndefined(ref) ? NULL : ref,297 hasKeyedChildren: hasKeyedChildren,298 hasNonKeyedChildren: hasNonKeyedChildren,299 propChildren: propChildren,300 childrenKnown: childrenKnown,301 className: isNullOrUndefined(className) ? NULL : className,302 childFlags: childFlags,303 hasReCreateFlag: hasReCreateFlag,304 needsNormalization: needsNormalization,305 contentEditable: contentEditable,306 hasTextChildren: hasTextChildren,307 flagsOverride: flagsOverride308 };309}310function isAstNull(ast) {311 if (!ast) {312 return true;313 }314 if (ast.type === 'ArrayExpression' && ast.elements.length === 0) {315 return true;316 }317 return ast.name === 'null';318}319function createVNodeArgs(flags, type, className, children, childFlags, props, key, ref, defineAll) {320 var args = [];321 var hasClassName = !isAstNull(className);322 var hasChildren = !isAstNull(children);323 var hasChildFlags = childFlags !== ChildFlags.HasInvalidChildren;324 var hasProps = props.properties && props.properties.length > 0;325 var hasKey = !isAstNull(key);326 var hasRef = !isAstNull(ref);327 args.push(typeof flags === 'number' ? t.NumericLiteral(flags) : flags);328 args.push(type);329 if (hasClassName) {330 args.push(className);331 } else if (defineAll || hasChildren || hasChildFlags || hasProps || hasKey || hasRef) {332 args.push(NULL);333 }334 if (hasChildren) {335 args.push(children);336 } else if (defineAll || hasChildFlags || hasProps || hasKey || hasRef) {337 args.push(NULL);338 }339 if (hasChildFlags) {340 args.push(typeof childFlags === 'number' ? t.NumericLiteral(childFlags) : childFlags);341 } else if (defineAll || hasProps || hasKey || hasRef) {342 args.push(t.NumericLiteral(ChildFlags.HasInvalidChildren));343 }344 if (hasProps) {345 args.push(props);346 } else if (defineAll || hasKey || hasRef) {347 args.push(NULL);348 }349 if (hasKey) {350 args.push(key);351 } else if (defineAll || hasRef) {352 args.push(NULL);353 }354 if (defineAll || hasRef) {355 args.push(ref);356 }357 return args;358}359function createFragmentVNodeArgs(children, childFlags, key, defineAll) {360 var args = [];361 var hasChildren = !isAstNull(children);362 var hasChildFlags = hasChildren && childFlags !== ChildFlags.HasInvalidChildren;363 var hasKey = !isAstNull(key);364 if (hasChildren) {365 if (366 childFlags === ChildFlags.HasNonKeyedChildren ||367 childFlags === ChildFlags.HasKeyedChildren ||368 childFlags === ChildFlags.UnknownChildren ||369 children.type === 'ArrayExpression') {370 args.push(children);371 } else {372 args.push(t.arrayExpression([children]));373 }374 } else if (defineAll || hasChildFlags || hasKey) {375 args.push(NULL);376 }377 if (hasChildFlags) {378 args.push(typeof childFlags === 'number' ? t.NumericLiteral(childFlags) : childFlags);379 } else if (defineAll || hasKey) {380 args.push(t.NumericLiteral(ChildFlags.HasInvalidChildren));381 }382 if (defineAll || hasKey) {383 args.push(key);384 }385 return args;386}387function createComponentVNodeArgs(flags, type, props, key, ref, defineAll) {388 var args = [];389 var hasProps = props.properties && props.properties.length > 0;390 var hasKey = !isAstNull(key);391 var hasRef = !isAstNull(ref);392 args.push(typeof flags === 'number' ? t.NumericLiteral(flags) : flags);393 args.push(type);394 if (hasProps) {395 args.push(props);396 } else if (defineAll || hasKey || hasRef) {397 args.push(NULL);398 }399 if (hasKey) {400 args.push(key);401 } else if (defineAll || hasRef) {402 args.push(NULL);403 }404 if (defineAll || hasRef) {405 args.push(ref);406 }407 return args;408}409function addCreateTextVNodeCalls(vChildren, opts) {410 // When normalization is not needed we need to manually compile text into vNodes411 for (var j = 0; j < vChildren.elements.length; j++) {412 var aChild = vChildren.elements[j];413 if (aChild.type === 'StringLiteral') {414 vChildren.elements[j] = t.callExpression(415 t.identifier(opts.pragmaTextVNode || 'createTextVNode'),416 [aChild]417 );418 }419 }420 return vChildren;421}422function transformTextNodes(vChildren, childrenResults, opts, fileState) {423 fileState.set('createTextVNode', true);424 if (vChildren.elements) {425 return addCreateTextVNodeCalls(vChildren, opts);426 }427 if (vChildren.type === 'StringLiteral') {428 return t.callExpression(429 t.identifier(opts.pragmaTextVNode || 'createTextVNode'),430 [vChildren]431 );432 }433}434function createVNode(astNode, opts, fileState, defineAll) {435 var astType = astNode.type;436 var text;437 var childrenResults;438 var vChildren;439 switch (astType) {440 case 'JSXFragment':441 childrenResults = getVNodeChildren(astNode.children, opts, fileState, defineAll);442 vChildren = childrenResults.children;443 if (!childrenResults.requiresNormalization) {444 if (childrenResults.parentCanBeKeyed) {445 childFlags = ChildFlags.HasKeyedChildren;446 } else {447 childFlags = ChildFlags.HasNonKeyedChildren;448 }449 if (childrenResults.hasSingleChild) {450 vChildren = t.arrayExpression([vChildren]);451 }452 } else {453 childFlags = ChildFlags.UnknownChildren;454 }455 if (vChildren && vChildren !== NULL && childrenResults.foundText) {456 vChildren = transformTextNodes(vChildren, childrenResults, opts, fileState);457 }458 fileState.set('createFragment', true);459 return t.callExpression(460 t.identifier(opts.pragmaFragmentVNode || 'createFragment'),461 createFragmentVNodeArgs(462 vChildren,463 childFlags,464 defineAll465 )466 );467 case 'JSXElement':468 var openingElement = astNode.openingElement;469 var vType = getVNodeType(openingElement.name);470 var vNodeType = vType.vNodeType;471 var vProps = getVNodeProps(openingElement.attributes, vNodeType === TYPE_COMPONENT);472 childrenResults = getVNodeChildren(astNode.children, opts, fileState, defineAll);473 vChildren = childrenResults.children;474 var childFlags = ChildFlags.HasInvalidChildren;475 var flags = vType.flags;476 var props = vProps.props;477 var childIndex = -1;478 var i = 0;479 if (vProps.hasReCreateFlag) {480 flags = flags | VNodeFlags.ReCreate;481 }482 if (vProps.contentEditable) {483 flags = flags | VNodeFlags.ContentEditable;484 }485 if (vNodeType === TYPE_COMPONENT) {486 if (vChildren) {487 if (!(vChildren.type === 'ArrayExpression' && vChildren.elements.length === 0)) {488 // Remove children from props, if it exists489 for (i = 0; i < props.properties.length; i++) {490 if (props.properties[i].key && props.properties[i].key.value === 'children') {491 childIndex = i;492 break;493 }494 }495 if (childIndex !== -1) {496 props.properties.splice(childIndex, 1); // Remove prop children497 }498 props.properties.push(499 t.ObjectProperty(500 t.identifier('children'),501 vChildren502 )503 );504 }505 vChildren = NULL;506 }507 } else {508 if (vProps.propChildren && vChildren.type === 'ArrayExpression' && vChildren.elements.length === 0) {509 if (vProps.propChildren.value.type === 'StringLiteral') {510 text = handleWhiteSpace(vProps.propChildren.value.value);511 if (text !== '') {512 if (vNodeType !== TYPE_FRAGMENT) {513 childrenResults.foundText = true;514 childrenResults.hasSingleChild = true;515 }516 vChildren = t.StringLiteral(text);517 } else {518 vChildren = NULL;519 childFlags = ChildFlags.HasInvalidChildren;520 }521 } else if (vProps.propChildren.value.type === 'JSXExpressionContainer') {522 if (vProps.propChildren.value.expression.type === 'JSXEmptyExpression' ||523 vProps.propChildren.value.expression.type === 'NullLiteral') {524 vChildren = NULL;525 childFlags = ChildFlags.HasInvalidChildren;526 } else {527 vChildren = vProps.propChildren.value.expression;528 childFlags = ChildFlags.HasVNodeChildren;529 }530 } else {531 vChildren = NULL;532 childFlags = ChildFlags.HasInvalidChildren;533 }534 }535 if (!childrenResults.requiresNormalization || vProps.childrenKnown) {536 if (vProps.hasKeyedChildren || childrenResults.parentCanBeKeyed) {537 childFlags = ChildFlags.HasKeyedChildren;538 } else if (vProps.hasNonKeyedChildren || childrenResults.parentCanBeNonKeyed) {539 childFlags = ChildFlags.HasNonKeyedChildren;540 } else if (vProps.hasTextChildren || (childrenResults.foundText && childrenResults.hasSingleChild)) {541 childrenResults.foundText = vNodeType === TYPE_FRAGMENT;542 childFlags = vNodeType === TYPE_FRAGMENT ? ChildFlags.HasNonKeyedChildren : ChildFlags.HasTextChildren;543 } else if (childrenResults.hasSingleChild) {544 childFlags = vNodeType === TYPE_FRAGMENT ? ChildFlags.HasNonKeyedChildren : ChildFlags.HasVNodeChildren;545 }546 } else {547 if (vProps.hasKeyedChildren) {548 childFlags = ChildFlags.HasKeyedChildren;549 } else if (vProps.hasNonKeyedChildren) {550 childFlags = ChildFlags.HasNonKeyedChildren;551 }552 }553 // Remove children from props, if it exists554 childIndex = -1;555 for (i = 0; i < props.properties.length; i++) {556 if (props.properties[i].key && props.properties[i].key.value === 'children') {557 childIndex = i;558 break;559 }560 }561 if (childIndex !== -1) {562 props.properties.splice(childIndex, 1); // Remove prop children563 }564 }565 if (vChildren && vChildren !== NULL && childrenResults.foundText) {566 vChildren = transformTextNodes(vChildren, childrenResults, opts, fileState);567 }568 if (vProps.childFlags) {569 // If $ChildFlag is provided it is runtime dependant570 childFlags = vProps.childFlags;571 } else {572 childFlags = vNodeType !== TYPE_COMPONENT && childrenResults.requiresNormalization && !vProps.childrenKnown ? ChildFlags.UnknownChildren : childFlags;573 }574 var createVNodeCall;575 switch (vNodeType) {576 case TYPE_COMPONENT:577 fileState.set('createComponentVNode', true);578 createVNodeCall = t.callExpression(579 t.identifier(opts.pragmaCreateComponentVNode || 'createComponentVNode'),580 createComponentVNodeArgs(581 vProps.flagsOverride || flags,582 vType.type,583 props,584 vProps.key,585 vProps.ref,586 defineAll587 )588 );589 break;590 case TYPE_ELEMENT:591 fileState.set('createVNode', true);592 createVNodeCall = t.callExpression(593 t.identifier(opts.pragma || 'createVNode'),594 createVNodeArgs(595 vProps.flagsOverride || flags,596 vType.type,597 vProps.className,598 vChildren,599 childFlags,600 props,601 vProps.key,602 vProps.ref,603 defineAll604 )605 );606 break;607 case TYPE_FRAGMENT:608 fileState.set('createFragment', true);609 if (!childrenResults.requiresNormalization && childrenResults.hasSingleChild) {610 vChildren = t.arrayExpression([vChildren]);611 }612 return t.callExpression(613 t.identifier(opts.pragmaFragmentVNode || 'createFragment'),614 createFragmentVNodeArgs(615 vChildren,616 childFlags,617 vProps.key,618 defineAll619 )620 );621 }622 // NormalizeProps will normalizeChildren too623 if (vProps.needsNormalization) {624 fileState.set('normalizeProps', true);625 createVNodeCall = t.callExpression(626 t.identifier(opts.pragmaNormalizeProps || 'normalizeProps'),627 [createVNodeCall]628 );629 }630 return createVNodeCall;631 case 'JSXText':632 text = handleWhiteSpace(astNode.value);633 if (text !== '') {634 return t.StringLiteral(text);635 }636 break;637 case 'JSXExpressionContainer':638 var expression = astNode.expression;639 if (expression && expression.type !== 'JSXEmptyExpression') {640 return expression;641 }642 break;643 default:644 break;645 }646}647function getHoistedNode(lastNode, path) {648 if (path.parentPath === null) {649 var body = path.node.body;650 var index = body.indexOf(lastNode);651 return {652 node: path.node,653 index: index654 };655 } else {656 return getHoistedNode(path.node, path.parentPath);657 }658}659function visitorEnter(path, state) {660 var opts = state.opts;661 var defineAll = opts.defineAllArguments === true || opts.defineAllArguments === 'true';662 var node = createVNode(path.node, opts, state.file, defineAll);663 path.replaceWith(node);664 if (opts.imports === false || opts.imports === 'false') {665 if (!opts.hoistCreateVNode) {666 opts.hoistCreateVNode = true;667 opts.varNode = getHoistedNode(path.node, path.parentPath);668 }669 }670}671module.exports = function () {672 return {673 visitor: {674 Program: {675 exit: function (path, state) {676 var fileState = state.file;677 var needsAnyImports = Boolean(678 fileState.has('createVNode') ||679 fileState.has('createComponentVNode') ||680 fileState.has('normalizeProps') ||681 fileState.has('createTextVNode') ||682 fileState.has('createFragment')683 );684 if (needsAnyImports) {685 var opts = state.opts;686 var optionsImports = opts.imports;687 var importIdentifier = typeof optionsImports === 'string' && optionsImports !== 'false' ? optionsImports : 'inferno';688 if (optionsImports !== false && optionsImports !== 'false') {689 var importArray = [];690 if (fileState.has('createVNode') && !path.scope.hasBinding('createVNode')) {691 importArray.push(t.ImportSpecifier(t.identifier(opts.pragma || 'createVNode'), t.identifier('createVNode')));692 }693 if (fileState.has('createFragment') && !path.scope.hasBinding('createFragment')) {694 importArray.push(t.ImportSpecifier(t.identifier(opts.pragmaFragmentVNode || 'createFragment'), t.identifier('createFragment')));695 }696 if (fileState.has('createComponentVNode') && !path.scope.hasBinding('createComponentVNode')) {697 importArray.push(t.ImportSpecifier(t.identifier(opts.pragmaCreateComponentVNode || 'createComponentVNode'), t.identifier('createComponentVNode')));698 }699 if (fileState.has('normalizeProps') && !path.scope.hasBinding('normalizeProps')) {700 importArray.push(t.ImportSpecifier(t.identifier(opts.pragmaNormalizeProps || 'normalizeProps'), t.identifier('normalizeProps')));701 }702 if (fileState.has('createTextVNode') && !path.scope.hasBinding('createTextVNode')) {703 importArray.push(t.ImportSpecifier(t.identifier(opts.pragmaTextVNode || 'createTextVNode'), t.identifier('createTextVNode')));704 }705 if (importArray.length > 0) {706 path.node.body.unshift(t.importDeclaration(importArray, t.stringLiteral(importIdentifier)));707 }708 } else if (!opts.pragma) {709 var varArray = [];710 if (fileState.has('createVNode')) {711 varArray.push(712 t.VariableDeclarator(713 t.Identifier('createVNode'),714 t.memberExpression(t.identifier('Inferno'), t.identifier('createVNode'))715 )716 );717 }718 if (fileState.has('createFragment')) {719 varArray.push(720 t.VariableDeclarator(721 t.Identifier('createFragment'),722 t.memberExpression(t.identifier('Inferno'), t.identifier('createFragment'))723 )724 );725 }726 if (fileState.has('createComponentVNode')) {727 varArray.push(728 t.VariableDeclarator(729 t.Identifier('createComponentVNode'),730 t.memberExpression(t.identifier('Inferno'), t.identifier('createComponentVNode'))731 )732 );733 }734 if (fileState.has('normalizeProps')) {735 varArray.push(736 t.VariableDeclarator(737 t.Identifier('normalizeProps'),738 t.memberExpression(t.identifier('Inferno'), t.identifier('normalizeProps'))739 )740 );741 }742 if (fileState.has('createTextVNode')) {743 varArray.push(744 t.VariableDeclarator(745 t.Identifier('createTextVNode'),746 t.memberExpression(t.identifier('Inferno'), t.identifier('createTextVNode'))747 )748 );749 }750 var toInsert = opts.varNode;751 var node = toInsert.node;752 var index = toInsert.index;753 node.body.splice(index, 0, t.VariableDeclaration('var', varArray));754 }755 }756 }757 },758 JSXElement: {759 enter: visitorEnter760 },761 JSXFragment: {762 enter: visitorEnter763 }764 },765 inherits: jsx766 };...
stable_fragment.js
Source:stable_fragment.js
...148 }149 }150 else if (children.length > 1) {151 // root has multiple nodes - return a fragment block.152 root.codegenNode = createVNodeCall(context, helper(FRAGMENT), undefined, root.children, `${64 /* STABLE_FRAGMENT */} /* ${PatchFlagNames[64 /* STABLE_FRAGMENT */]} */`, undefined, undefined, true);153 }154 else ;155}156function createChildrenCodegenNode(branch, keyIndex, context) {157 const { helper } = context;158 const keyProperty = createObjectProperty(`key`, createSimpleExpression(`${keyIndex}`, false, locStub, true));159 const { children } = branch;160 const firstChild = children[0];161 const needFragmentWrapper = children.length !== 1 || firstChild.type !== 1 /* ELEMENT */;162 if (needFragmentWrapper) {163 if (children.length === 1 && firstChild.type === 11 /* FOR */) {164 // optimize away nested fragments when child is a ForNode165 const vnodeCall = firstChild.codegenNode;166 injectProp(vnodeCall, keyProperty, context);167 return vnodeCall;168 }169 else {170 return createVNodeCall(context, helper(FRAGMENT), createObjectExpression([keyProperty]), children, `${64 /* STABLE_FRAGMENT */} /* ${PatchFlagNames[64 /* STABLE_FRAGMENT */]} */`, undefined, undefined, true, false, branch.loc);171 }172 }173 else {174 const vnodeCall = firstChild175 .codegenNode;176 // Change createVNode to createBlock.177 if (vnodeCall.type === 13 /* VNODE_CALL */) {178 vnodeCall.isBlock = true;179 helper(OPEN_BLOCK);180 helper(CREATE_BLOCK);181 }182 // inject branch key183 injectProp(vnodeCall, keyProperty, context);184 return vnodeCall;185 }186}187const transformFor = createStructuralDirectiveTransform('for', (node, dir, context) => {188 const { helper } = context;189 return processFor(node, dir, context, forNode => {190 // create the loop render function expression now, and add the191 // iterator on exit after all children have been traversed192 const renderExp = createCallExpression(helper(RENDER_LIST), [193 forNode.source194 ]);195 const keyProp = findProp(node, `key`);196 const keyProperty = keyProp197 ? createObjectProperty(`key`, keyProp.type === 6 /* ATTRIBUTE */198 ? createSimpleExpression(keyProp.value.content, true)199 : keyProp.exp)200 : null;201 const isStableFragment = forNode.source.type === 4 /* SIMPLE_EXPRESSION */ &&202 forNode.source.isConstant;203 const fragmentFlag = isStableFragment204 ? 64 /* STABLE_FRAGMENT */205 : keyProp206 ? 128 /* KEYED_FRAGMENT */207 : 256 /* UNKEYED_FRAGMENT */;208 forNode.codegenNode = createVNodeCall(context, helper(FRAGMENT), undefined, renderExp, `${fragmentFlag} /* ${PatchFlagNames[fragmentFlag]} */`, undefined, undefined, true /* isBlock */, !isStableFragment /* disableTracking */, node.loc);209 return () => {210 // finish the codegen now that all children have been traversed211 let childBlock;212 const isTemplate = isTemplateNode(node);213 const { children } = forNode;214 // check <template v-for> key placement215 if ( isTemplate) {216 node.children.some(c => {217 if (c.type === 1 /* ELEMENT */) {218 const key = findProp(c, 'key');219 if (key) {220 context.onError(createCompilerError(32 /* X_V_FOR_TEMPLATE_KEY_PLACEMENT */, key.loc));221 return true;222 }223 }224 });225 }226 const needFragmentWrapper = children.length !== 1 || children[0].type !== 1 /* ELEMENT */;227 const slotOutlet = isSlotOutlet(node)228 ? node229 : isTemplate &&230 node.children.length === 1 &&231 isSlotOutlet(node.children[0])232 ? node.children[0] // api-extractor somehow fails to infer this233 : null;234 if (slotOutlet) {235 // <slot v-for="..."> or <template v-for="..."><slot/></template>236 childBlock = slotOutlet.codegenNode;237 if (isTemplate && keyProperty) {238 // <template v-for="..." :key="..."><slot/></template>239 // we need to inject the key to the renderSlot() call.240 // the props for renderSlot is passed as the 3rd argument.241 injectProp(childBlock, keyProperty, context);242 }243 }244 else if (needFragmentWrapper) {245 // <template v-for="..."> with text or multi-elements246 // should generate a fragment block for each loop247 childBlock = createVNodeCall(context, helper(FRAGMENT), keyProperty ? createObjectExpression([keyProperty]) : undefined, node.children, `${64 /* STABLE_FRAGMENT */} /* ${PatchFlagNames[64 /* STABLE_FRAGMENT */]} */`, undefined, undefined, true);248 }249 else {250 // Normal element v-for. Directly use the child's codegenNode251 // but mark it as a block.252 childBlock = children[0]253 .codegenNode;254 if (isTemplate && keyProperty) {255 injectProp(childBlock, keyProperty, context);256 }257 childBlock.isBlock = !isStableFragment;258 if (childBlock.isBlock) {259 helper(OPEN_BLOCK);260 helper(CREATE_BLOCK);261 }...
transformElement.js
Source:transformElement.js
...74 if (dynamicPropNames && dynamicPropNames.length) {75 vnodeDynamicProps = stringifyDynamicPropNames(dynamicPropNames);76 }77 }78 node.codegenNode = createVNodeCall(79 node.type,80 vnodeTag,81 vnodeProps,82 vnodeChildren,83 vnodePatchFlag,84 vnodeDynamicProps,85 vnodeDirectives,86 isComponent87 );88 };89};90function buildProps(node, context, props = node.props) {91 const isComponent = node.tagType === ElementTypes.COMPONENT;92 let properties = [];...
vFor.js
Source:vFor.js
...46 const keyProperty = keyProp ? createObjectProperty(`key`, keyExp) : null47 const isStableFragment =48 forNode.source.type === 4 && forNode.source.constType > 049 const fragmentFlag = isStableFragment ? 64 : keyProp ? 128 : 25650 forNode.codegenNode = createVNodeCall(51 context,52 helper(FRAGMENT),53 undefined,54 renderExp,55 fragmentFlag + ` /* ${PatchFlagNames[fragmentFlag]} */`,56 undefined,57 undefined,58 true,59 !isStableFragment,60 false,61 node.loc62 )63 return () => {64 let childBlock65 const { children } = forNode66 if (isTemplate) {67 node.children.some(c => {68 if (c.type === 1) {69 const key = findProp(c, 'key')70 if (key) {71 return true72 }73 }74 })75 }76 const needFragmentWrapper =77 children.length !== 1 || children[0].type !== 178 const slotOutlet = isSlotOutlet(node)79 ? node80 : isTemplate &&81 node.children.length === 1 &&82 isSlotOutlet(node.children[0])83 ? node.children[0]84 : null85 if (slotOutlet) {86 childBlock = slotOutlet.codegenNode87 if (isTemplate && keyProperty) {88 injectProp(childBlock, keyProperty, context)89 }90 } else if (needFragmentWrapper) {91 childBlock = createVNodeCall(92 context,93 helper(FRAGMENT),94 keyProperty ? createObjectExpression([keyProperty]) : undefined,95 node.children,96 64 + ` /* ${PatchFlagNames[64]} */`,97 undefined,98 undefined,99 true,100 undefined,101 false102 )103 } else {104 childBlock = children[0].codegenNode105 if (isTemplate && keyProperty) {...
vIf.js
Source:vIf.js
...159 if (children.filter(c => c.type !== 3).length === 1) {160 patchFlag |= 2048161 patchFlagText += `, ${PatchFlagNames[2048]}`162 }163 return createVNodeCall(164 context,165 helper(FRAGMENT),166 createObjectExpression([keyProperty]),167 children,168 patchFlag + ` /* ${patchFlagText} */`,169 undefined,170 undefined,171 true,172 false,173 false,174 branch.loc175 )176 }177 } else {...
disableTracking.js
Source:disableTracking.js
1function createVNodeCall(context, tag, props, children, patchFlag, dynamicProps, directives, isBlock = false, disableTracking = false, loc = locStub) {2 if (context) {3 if (isBlock) {4 context.helper(OPEN_BLOCK);5 context.helper(CREATE_BLOCK);6 }7 else {8 context.helper(CREATE_VNODE);9 }10 if (directives) {11 context.helper(WITH_DIRECTIVES);12 }13 }14 return {15 type: 13 /* VNODE_CALL */,16 tag,17 props,18 children,19 patchFlag,20 dynamicProps,21 directives,22 isBlock,23 disableTracking,24 loc25 };26}27const transformFor = createStructuralDirectiveTransform('for', (node, dir, context) => {28 const { helper } = context;29 return processFor(node, dir, context, forNode => {30 // create the loop render function expression now, and add the31 // iterator on exit after all children have been traversed32 const renderExp = createCallExpression(helper(RENDER_LIST), [33 forNode.source34 ]);35 const keyProp = findProp(node, `key`);36 const keyProperty = keyProp37 ? createObjectProperty(`key`, keyProp.type === 6 /* ATTRIBUTE */38 ? createSimpleExpression(keyProp.value.content, true)39 : keyProp.exp)40 : null;41 const isStableFragment = forNode.source.type === 4 /* SIMPLE_EXPRESSION */ &&42 forNode.source.isConstant;43 const fragmentFlag = isStableFragment44 ? 64 /* STABLE_FRAGMENT */45 : keyProp46 ? 128 /* KEYED_FRAGMENT */47 : 256 /* UNKEYED_FRAGMENT */;48 forNode.codegenNode = createVNodeCall(context, helper(FRAGMENT), undefined, renderExp, `${fragmentFlag} /* ${PatchFlagNames[fragmentFlag]} */`, undefined, undefined, true /* isBlock */, !isStableFragment /* disableTracking */, node.loc);49 return () => {50 // finish the codegen now that all children have been traversed51 let childBlock;52 const isTemplate = isTemplateNode(node);53 const { children } = forNode;54 // check <template v-for> key placement55 if ( isTemplate) {56 node.children.some(c => {57 if (c.type === 1 /* ELEMENT */) {58 const key = findProp(c, 'key');59 if (key) {60 context.onError(createCompilerError(32 /* X_V_FOR_TEMPLATE_KEY_PLACEMENT */, key.loc));61 return true;62 }63 }64 });65 }66 const needFragmentWrapper = children.length !== 1 || children[0].type !== 1 /* ELEMENT */;67 const slotOutlet = isSlotOutlet(node)68 ? node69 : isTemplate &&70 node.children.length === 1 &&71 isSlotOutlet(node.children[0])72 ? node.children[0] // api-extractor somehow fails to infer this73 : null;74 if (slotOutlet) {75 // <slot v-for="..."> or <template v-for="..."><slot/></template>76 childBlock = slotOutlet.codegenNode;77 if (isTemplate && keyProperty) {78 // <template v-for="..." :key="..."><slot/></template>79 // we need to inject the key to the renderSlot() call.80 // the props for renderSlot is passed as the 3rd argument.81 injectProp(childBlock, keyProperty, context);82 }83 }84 else if (needFragmentWrapper) {85 // <template v-for="..."> with text or multi-elements86 // should generate a fragment block for each loop87 childBlock = createVNodeCall(context, helper(FRAGMENT), keyProperty ? createObjectExpression([keyProperty]) : undefined, node.children, `${64 /* STABLE_FRAGMENT */} /* ${PatchFlagNames[64 /* STABLE_FRAGMENT */]} */`, undefined, undefined, true);88 }89 else {90 // Normal element v-for. Directly use the child's codegenNode91 // but mark it as a block.92 childBlock = children[0]93 .codegenNode;94 if (isTemplate && keyProperty) {95 injectProp(childBlock, keyProperty, context);96 }97 childBlock.isBlock = !isStableFragment;98 if (childBlock.isBlock) {99 helper(OPEN_BLOCK);100 helper(CREATE_BLOCK);101 }...
ast.js
Source:ast.js
...21export const ElementTypes = {22 ELEMENT: 'ELEMENT',23 COMPONENT: 'COMPONENT'24};25export function createVNodeCall(26 type,27 tag,28 props,29 children,30 patchFlag,31 dynamicProps,32 directives,33 isComponent34) {35 return {36 type,37 tag,38 props,39 children,...
compiler_createVNodeCall.md.377ce0a0.lean.js
Source:compiler_createVNodeCall.md.377ce0a0.lean.js
1import { o as n, c as s, a } from './app.547ab472.js'2const p =3 '{"title":"createVNodeCall","description":"","frontmatter":{},"headers":[{"level":2,"title":"createVNodeCall","slug":"createvnodecall"},{"level":2,"title":"æ»ç»","slug":"æ»ç»"}],"relativePath":"compiler/createVNodeCall.md","lastUpdated":1641357564050}',4 t = {},5 o = a('', 8)6t.render = function(a, p, t, e, c, u) {7 return n(), s('div', null, [o])8}9export default t...
Using AI Code Generation
1const { createVNodeCall } = require('@playwright/test/lib/server/frames');2const { createVNodeCall } = require('@playwright/test/lib/server/frames');3const { createVNodeCall } = require('@playwright/test/lib/server/frames');4const { createVNodeCall } = require('@playwright/test/lib/server/frames');5const { createVNodeCall } = require('@playwright/test/lib/server/frames');6const { createVNodeCall } = require('@playwright/test/lib/server/frames');7const { createVNodeCall } = require('@playwright/test/lib/server/frames');8const { createVNodeCall } = require('@playwright/test/lib/server/frames');9const { createVNodeCall } = require('@playwright/test/lib/server/frames');10const { createVNodeCall } = require('@playwright/test/lib/server/frames');11const { createVNodeCall } = require('@playwright/test/lib/server/frames');12const { createVNodeCall } = require('@playwright/test/lib/server/frames');13const { createVNodeCall } = require('@playwright/test/lib/server/frames');14const { createVNodeCall } = require('@playwright/test/lib/server/frames');15const { createVNodeCall } = require('@playwright/test/lib/server/frames');16const {
Using AI Code Generation
1const playwright = require("playwright");2const { createVNodeCall } = require("playwright/lib/server/vnc");3(async () => {4 const browser = await playwright.chromium.launch();5 const context = await browser.newContext();6 const page = await context.newPage();7 const vnc = await page.evaluateHandle(() => {8 const vnc = new VNC();9 vnc.connect();10 return vnc;11 });12 const vncCall = createVNodeCall(vnc);13 await vncCall.createNode("DIV");14 await browser.close();15})();
Using AI Code Generation
1const { createVNodeCall } = require('playwright');2const { Page } = require('playwright');3 * @param {Page} page4 * @param {string} selector5 * @param {string} text6async function setTextContent(page, selector, text) {7 await page.evaluate(createVNodeCall('textContent', selector, text));8}9module.exports = { setTextContent };
Using AI Code Generation
1const { createVNodeCall } = require('@playwright/test/lib/server/vnode');2const { createVNode } = require('@playwright/test/lib/server/vnode');3const { createVNodeCall } = require('@playwright/test/lib/server/vnode');4const { createVNode } = require('@playwright/test/lib/server/vnode');5const { createVNodeCall } = require('@playwright/test/lib/server/vnode');6const { createVNode } = require('@playwright/test/lib/server/vnode');7const { createVNodeCall } = require('@playwright/test/lib/server/vnode');8const { createVNode } = require('@playwright/test/lib/server/vnode');9const { createVNodeCall } = require('@playwright/test/lib/server/vnode');10const { createVNode } = require('@playwright/test/lib/server/vnode');11const { createVNodeCall } = require('@playwright/test/lib/server/vnode');12const { createVNode } = require('@playwright/test/lib/server/vnode');13const { createVNodeCall } = require('@playwright/test/lib/server/vnode');14const { createVNode } = require('@playwright/test/lib/server/vnode');15const { createVNodeCall } = require('@playwright/test/lib/server/vnode');16const { createVNode } = require('@playwright/test/lib/server/vnode');17const { createVNodeCall } = require('@playwright/test/lib/server/vnode');18const { createVNode } = require('@playwright/test/lib/server/vnode');19const { createVNodeCall } = require('@playwright/test/lib/server/vnode');20const { createVNode } = require('@playwright/test/lib/server/vnode');21const { createVNodeCall } = require('@playwright/test/lib/server/vnode');22const { createVNode } = require('@playwright/test/lib/server/vnode');23const { createVNodeCall } = require('@playwright/test/lib/server/vnode');24const { createVNode } = require('@playwright/test/lib/server/vnode');25const { createVNodeCall } = require('@playwright/test/lib/server/vnode');26const { createVNode } = require('@playwright/test/lib/server/vnode');27const { createVNodeCall } = require('@playwright/test/lib/server/vnode');28const { createVNode } = require('@playwright/test/lib/server/vnode');29const { createVNodeCall }
Using AI Code Generation
1const { createVNodeCall } = require('playwright/lib/server/frames');2const { Page } = require('playwright/lib/server/page');3const { Frame } = require('playwright/lib/server/frame');4const { createVNodeCall } = require('playwright/lib/server/frames');5const { Page } = require('playwright/lib/server/page');6const { Frame } = require('playwright/lib/server/frame');7const { createVNodeCall } = require('playwright/lib/server/frames');8const { Page } = require('playwright/lib/server/page');9const { Frame } = require('playwright/lib/server/frame');10const { createVNodeCall } = require('playwright/lib/server/frames');11const { Page } = require('playwright/lib/server/page');12const { Frame } = require('playwright/lib/server/frame');13const { createVNodeCall } = require('playwright/lib/server/frames');14const { Page } = require('playwright/lib/server/page');15const { Frame } = require('playwright/lib/server/frame');16const { createVNodeCall } = require('playwright/lib/server/frames');17const { Page } = require('playwright/lib/server/page');18const { Frame } = require('playwright/lib/server/frame');19const { createVNodeCall } = require('playwright/lib/server/frames');20const { Page } = require('playwright/lib/server/page');21const { Frame } = require('playwright/lib/server/frame');22const { createVNodeCall } = require('playwright/lib/server/frames');23const { Page } = require('playwright/lib/server/page');24const { Frame } = require('playwright/lib/server/frame');25const { createVNodeCall } = require('playwright/lib/server/frames');26const { Page } = require('playwright/lib/server/page');27const { Frame
Using AI Code Generation
1const { createVNodeCall } = require('playwright');2const { Page } = require('playwright/lib/server/page');3const { ElementHandle } = require('playwright/lib/server/dom');4const { ElementHandleChannel } = require('playwright/lib/server/channels');5const { ChannelOwner } = require('playwright/lib/server/channelOwner');6const page = new Page(new ChannelOwner(null, {}, '', undefined), '', {});7const elementHandle = new ElementHandle(page, 'elementHandle', {}, new ElementHandleChannel(page, 'elementHandle', {}));8const vnode = createVNodeCall(elementHandle, 'div', { class: 'foo' }, ['bar']);9console.log(vnode);10const { chromium } = require('playwright');11const { createVNodeCall } = require('playwright');12(async () => {13 const browser = await chromium.launch();14 const context = await browser.newContext();15 const page = await context.newPage();16 const elementHandle = await page.$('div');17 const vnode = createVNodeCall(elementHandle, 'div', { class: 'foo' }, ['bar']);18 console.log(vnode);19 await browser.close();20})();21import { createVNodeCall } from 'playwright';22import { Page } from 'playwright/lib/server/page';23import { ElementHandle } from 'playwright/lib/server/dom';24import { ElementHandleChannel } from 'playwright/lib/server/channels';25import { ChannelOwner } from 'playwright/lib/server/channelOwner';26const page = new Page(new ChannelOwner(null, {}, '', undefined), '', {});27const elementHandle = new ElementHandle(page, 'elementHandle', {}, new ElementHandleChannel(page, 'elementHandle', {}));28const vnode = createVNodeCall(elementHandle, 'div', { class: 'foo' }, ['bar']);29console.log(vnode);
Using AI Code Generation
1const { createVNodeCall } = require('playwright/lib/server/domServer');2const { createElement: h } = require('playwright/lib/server/domServer');3const { renderToStaticMarkup } = require('react-dom/server');4const { page } = await browser.newPage();5const vnode = createVNodeCall(h, 'div', { id: 'foo' }, 'Hello World');6const html = renderToStaticMarkup(vnode);7await page.setContent(html);8await page.screenshot({ path: 'example.png' });9const { createVNodeCall } = require('playwright/lib/server/domServer');10const { createElement: h } = require('playwright/lib/server/domServer');11const { renderToStaticMarkup } = require('react-dom/server');12const { page } = await browser.newPage();13const vnode = createVNodeCall(h, 'div', { id: 'foo' }, 'Hello World');14const html = renderToStaticMarkup(vnode);15await page.setContent(html);16await page.screenshot({ path: 'example.png' });17const { createVNodeCall } = require('playwright/lib/server/domServer');18const { createElement: h } = require('playwright/lib/server/domServer');19const { renderToStaticMarkup } = require('react-dom/server');20const { page } = await browser.newPage();21const vnode = createVNodeCall(h, 'div', { id: 'foo' }, 'Hello World');22const html = renderToStaticMarkup(vnode);23await page.setContent(html);24await page.screenshot({ path: 'example.png' });25const { createVNodeCall } = require('playwright/lib/server/domServer');26const { createElement: h } = require('playwright/lib/server/domServer');27const { renderToStaticMarkup } = require('react-dom/server');28const { page } = await browser.newPage();29const vnode = createVNodeCall(h, 'div', { id: 'foo' }, 'Hello World');30const html = renderToStaticMarkup(vnode);31await page.setContent(html);32await page.screenshot({ path: 'example.png' });
Using AI Code Generation
1const { createVNodeCall } = require('playwright-core/lib/server/domServer');2const vNode = createVNodeCall('div', {}, [3 createVNodeCall('div', { id: 'test' }, 'Hello, World!'),4]);5console.log(JSON.stringify(vNode));6const { createVNodeCall } = require('playwright-core/lib/server/domServer');7const vNode = createVNodeCall('div', {}, [8 createVNodeCall('div', { id: 'test' }, 'Hello, World!'),9]);10console.log(JSON.stringify(vNode));11import { createVNodeCall } from 'playwright-core/lib/server/domServer';12const vNode = createVNodeCall('div', {}, [13 createVNodeCall('div', { id: 'test' }, 'Hello, World!'),14]);15console.log(JSON.stringify(vNode));16import { createVNodeCall } from 'playwright-core/lib/server/domServer';17const vNode = createVNodeCall('div', {}, [18 createVNodeCall('div', { id: 'test' }, 'Hello, World!'),19]);20console.log(JSON.stringify(vNode));21import { createVNodeCall } from 'playwright-core/lib/server/domServer';22const vNode = createVNodeCall('div', {}, [23 createVNodeCall('div', { id: 'test' }, 'Hello, World!'),24]);25console.log(JSON.stringify(vNode));26import { createVNodeCall } from 'playwright-core/lib/server/domServer';27const vNode = createVNodeCall('div', {}, [28 createVNodeCall('div', { id: 'test' }, 'Hello, World!'),29]);30console.log(JSON.stringify(vNode));31const { createVNodeCall } = require('playwright
Using AI Code Generation
1const { createVNodeCall } = require('playwright/lib/page');2const { Page } = require('playwright/lib/server/chromium/crPage');3const vnodeCall = createVNodeCall('button', {4});5const vnodeCallChild = createVNodeCall('span', {6});7vnodeCall.children.push(vnodeCallChild);8const page = new Page();9const vnodeCall = createVNodeCall('button', {10});11const vnodeCallChild = createVNodeCall('span', {12});13vnodeCall.children.push(vnodeCallChild);14const page = new Page();15const vnodeCall = createVNodeCall('button', {16});17const vnodeCallChild = createVNodeCall('span', {18});19vnodeCall.children.push(vnodeCallChild);20const page = new Page();21const vnodeCall = createVNodeCall('button', {22});23const vnodeCallChild = createVNodeCall('span', {24});25vnodeCall.children.push(vnodeCallChild);26const page = new Page();27const vnodeCall = createVNodeCall('button', {28});29const vnodeCallChild = createVNodeCall('span',
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!!