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
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',
Jest + Playwright - Test callbacks of event-based DOM library
firefox browser does not start in playwright
Is it possible to get the selector from a locator object in playwright?
How to run a list of test suites in a single file concurrently in jest?
Running Playwright in Azure Function
firefox browser does not start in playwright
This question is quite close to a "need more focus" question. But let's try to give it some focus:
Does Playwright has access to the cPicker object on the page? Does it has access to the window object?
Yes, you can access both cPicker and the window object inside an evaluate call.
Should I trigger the events from the HTML file itself, and in the callbacks, print in the DOM the result, in some dummy-element, and then infer from that dummy element text that the callbacks fired?
Exactly, or you can assign values to a javascript variable:
const cPicker = new ColorPicker({
onClickOutside(e){
},
onInput(color){
window['color'] = color;
},
onChange(color){
window['result'] = color;
}
})
And then
it('Should call all callbacks with correct arguments', async() => {
await page.goto(`http://localhost:5000/tests/visual/basic.html`, {waitUntil:'load'})
// Wait until the next frame
await page.evaluate(() => new Promise(requestAnimationFrame))
// Act
// Assert
const result = await page.evaluate(() => window['color']);
// Check the value
})
Check out the latest blogs from LambdaTest on this topic:
Native apps are developed specifically for one platform. Hence they are fast and deliver superior performance. They can be downloaded from various app stores and are not accessible through browsers.
One of the essential parts when performing automated UI testing, whether using Selenium or another framework, is identifying the correct web elements the tests will interact with. However, if the web elements are not located correctly, you might get NoSuchElementException in Selenium. This would cause a false negative result because we won’t get to the actual functionality check. Instead, our test will fail simply because it failed to interact with the correct element.
Smartphones have changed the way humans interact with technology. Be it travel, fitness, lifestyle, video games, or even services, it’s all just a few touches away (quite literally so). We only need to look at the growing throngs of smartphone or tablet users vs. desktop users to grasp this reality.
As part of one of my consulting efforts, I worked with a mid-sized company that was looking to move toward a more agile manner of developing software. As with any shift in work style, there is some bewilderment and, for some, considerable anxiety. People are being challenged to leave their comfort zones and embrace a continuously changing, dynamic working environment. And, dare I say it, testing may be the most ‘disturbed’ of the software roles in agile development.
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!!