Best JavaScript code snippet using playwright-internal
docma-web.js
Source:docma-web.js
...3608Utils.parseTicks = function (string) {3609 if (typeof string !== 'string') return '';3610 return string3611 .replace(/(```\s*)([\s\S]*?)(\s*```)/g, function (match, p1, p2) { // , p3, offset, string3612 return Utils.normalizeTabs(Utils._wrapCode(p2, true, true).replace(/`/g, '`'));3613 })3614 .replace(/(`)(.*?)(`)/g, function (match, p1, p2) { // , p3, offset, string3615 return Utils._wrapCode(p2, true);3616 });3617};3618/**3619 * Converts new lines to HTML paragraphs.3620 * @name DocmaWeb.Utils.parseNewLines3621 * @function3622 *3623 * @param {String} string - String to be parsed.3624 * @param {Object} [options] - Parse options.3625 * @param {Boolean} [options.keepIfSingle=false]3626 * If `true`, lines will not be converted to paragraphs.3627 *3628 * @returns {String} -3629 */3630Utils.parseNewLines = function (string, options) {3631 options = options || {};3632 return Utils._tokenize(string, function (block, isCode) {3633 if (isCode) return block;3634 var parts = block.split(/[\r\n]{2,}/);3635 if (parts.length <= 1 && options.keepIfSingle) return block;3636 return parts.map(function (part) {3637 return '<p>' + part + '</p>';3638 }).join('');3639 }).join('');3640};3641/**3642 * Converts JSDoc `@link` directives to HTML anchor tags.3643 * @name DocmaWeb.Utils.parseLinks3644 * @function3645 *3646 * @param {String} string - String to be parsed.3647 * @param {Object} [options] - Parse options.3648 * @param {String} [options.target] - Href target. e.g. `"_blank"`3649 *3650 * @returns {String} -3651 */3652Utils.parseLinks = function (string, options) {3653 if (typeof string !== 'string') return '';3654 options = options || {};3655 var re = /\{@link +([^}]*?)\}/g;3656 var out = string.replace(re, function (match, p1) { // , offset, string3657 var link, label,3658 parts = p1.split('|');3659 if (parts.length === 1) {3660 link = label = parts[0].trim(); // eslint-disable-line3661 } else {3662 link = parts[0].trim();3663 label = parts[1].trim();3664 }3665 // if does not look like a URL path, treat this as a symbol bookmark.3666 // instead, we could check like this:3667 // if (symbolNames && symbolNames.indexOf(link) >= 0) {..}3668 // but it has too much overhead...3669 if ((/[/?&=]/).test(link) === false && link[0] !== '#') link = '#' + link;3670 var target = options.target3671 ? ' target="' + options.target + '" rel="noopener noreferrer"'3672 : '';3673 return '<a href="' + link + '"' + target + '>' + label + '</a>';3674 });3675 return Utils.parseTicks(out);3676};3677/**3678 * Parses the given string into proper HTML. Removes leading whitespace,3679 * converts new lines to paragraphs, ticks to code tags and JSDoc links to3680 * anchors.3681 * @name DocmaWeb.Utils.parse3682 * @function3683 *3684 * @param {String} string - String to be parsed.3685 * @param {Object} [options] - Parse options.3686 * @param {Object} [options.keepIfSingle=false]3687 * If enabled, single lines will not be converted to paragraphs.3688 * @param {String} [options.target]3689 * Href target for links. e.g. `"_blank"`3690 *3691 * @returns {String} -3692 */3693Utils.parse = function (string, options) {3694 options = options || {};3695 string = Utils.trimLeft(string);3696 string = Utils.parseNewLines(string, options);3697 string = Utils.parseTicks(string);3698 return Utils.parseLinks(string, options);3699};3700/**3701 * Normalizes the number of spaces/tabs to multiples of 2 spaces, in the3702 * beginning of each line. Useful for fixing mixed indets of a description3703 * or example.3704 * @name DocmaWeb.Utils.normalizeTabs3705 * @function3706 *3707 * @param {String} string - String to process.3708 *3709 * @returns {String} -3710 */3711Utils.normalizeTabs = function (string) {3712 if (typeof string !== 'string') return '';3713 var m = string.match(/^\s*/gm),3714 min = Infinity;3715 m.forEach(function (wspace, index) {3716 // tabs to spaces3717 wspace = wspace.replace(/\t/g, ' ');3718 // ignoring first line's indent3719 if (index > 0) min = Math.min(wspace.length, min);3720 });3721 // replace the minimum indent from all lines (except first)3722 if (min !== Infinity) {3723 var re = new RegExp('^\\s{' + min + '}', 'g');3724 string = string.replace(re, '');3725 }3726 // replace all leading spaces from first line3727 string = string.replace(/^\s*/, '');3728 var spaces;3729 return string.replace(/([\r\n]+)(\s+)/gm, function (match, p1, p2) { // , offset, string3730 // convert tabs to spaces3731 spaces = p2.replace(/\t/g, ' ');3732 // convert indent to multiples of 23733 spaces = new Array(spaces.length - (spaces.length % 2) + 1).join(' ');3734 return p1 + spaces;3735 });3736};3737/**3738 * Builds a string of keywords from the given symbol.3739 * This is useful for filter/search features of a template.3740 * @name DocmaWeb.Utils.getKeywords3741 * @function3742 *3743 * @param {Object} symbol - Target documentation symbol.3744 * @returns {String} -3745 */3746Utils.getKeywords = function (symbol) {3747 if (typeof symbol === 'string') return symbol.toLowerCase();3748 var k = Utils.getFullName(symbol) + ' '3749 + symbol.longname + ' '3750 + symbol.name + ' '3751 + (symbol.alias || '') + ' '3752 + (symbol.memberOf || '') + ' '3753 + (symbol.$kind || '') + ' '3754 + (symbol.scope || '') + ' '3755 + (symbol.classdesc || '') + ' '3756 + (symbol.description || '') + ' '3757 + (symbol.filename || '') + ' '3758 + (symbol.readonly ? 'readonly' : '')3759 + (symbol.isEnum ? 'enum' : '');3760 if (Utils.isConstructor(symbol)) k += ' constructor';3761 if (Utils.isMethod(symbol)) k += ' method';3762 if (Utils.isProperty(symbol)) k += ' property';3763 return k.replace(/[><"'`\n\r]/g, '').toLowerCase();3764};3765/**3766 * Gets code file information from the given symbol.3767 * @name DocmaWeb.Utils.getCodeFileInfo3768 * @function3769 *3770 * @param {Object} symbol - Target documentation symbol.3771 * @returns {Object} -3772 */3773Utils.getCodeFileInfo = function (symbol) {3774 return {3775 filename: Utils.notate(symbol, 'meta.filename'),3776 lineno: Utils.notate(symbol, 'meta.lineno'),3777 path: Utils.notate(symbol, 'meta.path')3778 };3779};3780/**3781 * Gets Docma route link for the given symbol or symbol name.3782 * @name DocmaWeb.Utils.getSymbolLink3783 * @function3784 * @static3785 *3786 * @param {Array|Object} docsOrApis - Documentation array or APIs object3787 * with signature `{ documentation:Array, symbols:Array }`.3788 * @param {Object|String} symbolOrName - Either the symbol itself or the3789 * name of the symbol.3790 *3791 * @returns {String} - Empty string if symbol is not found.3792 */3793Utils.getSymbolLink = function (docsOrApis, symbolOrName) {3794 if (typeof symbolOrName !== 'string') {3795 return symbolOrName.$docmaLink;3796 }3797 var symbol = Utils.getSymbolByName(docsOrApis, symbolOrName);3798 return symbol ? symbol.$docmaLink : '';3799};3800var reEndBrackets = /\[\]$/;3801// regexp for inspecting type parts such as `Map<String, Object>`,3802// `Promise<Boolean|String>[]` or simply `Boolean`. this also3803// removes/ignores dots from types such as Array.<String>3804var reTypeParts = /^([^<]+?)(?:\.)?(?:<\(([^>)]+)\)>)?(?:<([^>]+)>)?(\[\])?$/;3805function _link(docsOrApis, type, options) {3806 var endBrackets = reEndBrackets.test(type) ? '[]' : '';3807 var t = (type || '').replace(reEndBrackets, '');3808 var opts = options || {};3809 var link;3810 var target = '';3811 if (opts.linkType !== 'internal') {3812 link = Utils._getTypeExternalLink(t);3813 if (link) target = ' target="_blank" rel="noopener noreferrer"';3814 }3815 if (!link && opts.linkType !== 'external') link = Utils.getSymbolLink(docsOrApis, t);3816 if (link) type = '<a href="' + link + '"' + target + '>' + (opts.displayText || t) + endBrackets + '</a>';3817 return type;3818}3819/**3820 * Gets Docma route link for the given symbol or symbol name and returns a3821 * string with anchor tags.3822 * @private3823 *3824 * @param {Array|Object} docsOrApis - Documentation array or APIs object3825 * with signature `{ documentation:Array, symbols:Array }`.3826 * @param {String} strType - Symbol type.3827 * @param {String} [options] - Options3828 * @param {String} [options.displayText] - Alternative display text to3829 * be placed within the anchor tag.3830 * @param {String} [options.linkType] - Set to `"internal"` (Docma3831 * symbol link) or `"external"` (JS or Web-API MDN link), or omit to3832 * get any of them, if found.3833 *3834 * @returns {String} -3835 */3836Utils._parseAnchorLinks = function (docsOrApis, strType, options) {3837 // see reTypeParts and reEndBrackets3838 var m = strType.match(reTypeParts);3839 if (!m || !m[1]) return '';3840 // maybe we have end brackets e.g. Boolean[] or Promise<Boolean>[]3841 var endBrackets = m[4] || '';3842 var sTypes = m[2] || m[3] || '';3843 // check for multiple types e.g. Map<String, String>3844 if (sTypes) {3845 sTypes = sTypes.split(',').map(function (outerT) {3846 // check for sub-types e.g. Promise<Boolean|String>3847 return outerT3848 .trim()3849 .split('|')3850 .map(function (t) {3851 return _link(docsOrApis, t, options);3852 })3853 .join('<span class="code-delim">|</span>');3854 }).join('<span class="code-delim">, </span>');3855 }3856 if (sTypes) sTypes = '<' + sTypes + '>';3857 // check for sub-types e.g. Promise<Boolean|String>3858 return _link(docsOrApis, m[1], options) + sTypes + endBrackets;3859};3860/**3861 * Gets the types of the symbol as a string (joined with pipes `|`).3862 * @name DocmaWeb.Utils.getTypes3863 * @function3864 *3865 * @param {Array|Object} docsOrApis - Documentation array or APIs object3866 * with signature `{ documentation:Array, symbols:Array }`.3867 * @param {Object} symbol - Target documentation symbol.3868 * @param {Object} [options] - Options.3869 * @param {Boolean|String} [options.links=false] - Whether to add3870 * HTML anchor links to output. Set to `"internal"` to link3871 * internally (to Docma route with symbol hash, if found) or3872 * `"external"` to link externally (to MDN URL if this is a3873 * JS/Web-API built-in type/object) or `true` to try linking either3874 * to an internal or external target, which ever is found.3875 *3876 * @returns {String} -3877 *3878 * @example3879 * var symbol = { "type": { "names": ["Number", "String"] } };3880 * DocmaWeb.Utils.getTypes(docs, symbol); // "Number|String"3881 */3882Utils.getTypes = function (docsOrApis, symbol, options) {3883 var opts = options || {};3884 var types = symbol.kind === 'class'3885 ? ['class']3886 : Utils.notate(symbol, 'type.names') || [];3887 types = types.map(function (type) {3888 if (opts.links) type = Utils._parseAnchorLinks(docsOrApis, type, { linkType: opts.links });3889 return type;3890 }).join('<span class="code-delim">|</span>');3891 return symbol.isEnum ? 'enum<' + types + '>' : types;3892};3893// e.g.3894// "returns": [3895// {3896// "type": { "names": ["Date"] },3897// "description": "- Current date."3898// }3899// ]3900/**3901 * Gets the return types of the symbol as a string (joined with pipes `|`).3902 * @name DocmaWeb.Utils.getReturnTypes3903 * @function3904 *3905 * @param {Array|Object} docsOrApis - Documentation array or APIs object3906 * with signature `{ documentation:Array, symbols:Array }`.3907 * @param {Object} symbol - Target documentation symbol.3908 * @param {Object} [options] - Options.3909 * @param {Boolean|String} [options.links=false] - Whether to add3910 * HTML anchor links to output. Set to `"internal"` to link3911 * internally (to Docma route with symbol hash, if found) or3912 * `"external"` to link externally (to MDN URL if this is a3913 * JS/Web-API built-in type/object) or `true` to try linking either3914 * to an internal or external target, which ever is found.3915 *3916 * @returns {String} -3917 */3918Utils.getReturnTypes = function (docsOrApis, symbol, options) {3919 var ret = symbol.returns;3920 if (!Array.isArray(ret)) return 'void';3921 var opts = options || {};3922 var allTypes = ret.reduce(function (memo, r) {3923 var types = Utils.notate(r, 'type.names') || [];3924 if (opts.links) {3925 types = types.map(function (type) {3926 return Utils._parseAnchorLinks(docsOrApis, type, { linkType: opts.links });3927 });3928 }3929 return memo.concat(types);3930 }, []);3931 return allTypes.length > 03932 ? allTypes.join('<span class="code-delim">|</span>')3933 : 'void';3934};3935/**3936 * Gets HTML formatted, delimeted code tags.3937 * @name DocmaWeb.Utils.getCodeTags3938 * @function3939 *3940 * @param {Array|Object} docsOrApis - Documentation array or APIs object3941 * with signature `{ documentation:Array, symbols:Array }`.3942 * @param {Array} list - String list of values to be placed within code3943 * tags.3944 * @param {Object} [options] - Options.3945 * @param {String} [options.delimeter=","] - String delimeter.3946 * @param {Boolean|String} [options.links=false] - Whether to add3947 * HTML anchor links to output. Set to `"internal"` to link3948 * internally (to Docma route with symbol hash, if found) or3949 * `"external"` to link externally (to MDN URL if this is a3950 * JS/Web-API built-in type/object) or `true` to try linking either3951 * to an internal or external target, which ever is found.3952 *3953 * @returns {String} -3954 */3955Utils.getCodeTags = function (docsOrApis, list, options) {3956 var opts = options || {};3957 return list.map(function (item) {3958 if (opts.links) {3959 var parsed = Utils._parseAnchorLinks(docsOrApis, item, {3960 linkType: opts.links3961 });3962 return Utils._wrapCode(parsed, false);3963 }3964 return Utils._wrapCode(item, true);3965 }).join(opts.demileter || ',');3966};3967/**3968 * Gets HTML formatted list of types from the given symbols list. Type3969 * items are wrapped with code tags. If multiple, formatted as an HTML3970 * unordered list.3971 * @name DocmaWeb.Utils.getFormattedTypeList3972 * @function3973 *3974 * @param {Array|Object} docsOrApis - Documentation array or APIs object3975 * with signature `{ documentation:Array, symbols:Array }`.3976 * @param {Array} list - List of symbols to be converted to formatted3977 * string.3978 * @param {Object} [options] - Format options.3979 * @param {String} [options.delimeter="|"] - Types delimeter.3980 * @param {Boolean|String} [options.links=false] - Whether to add3981 * HTML anchor links to output. Set to `"internal"` to link3982 * internally (to Docma route with symbol hash, if found) or3983 * `"external"` to link externally (to MDN URL if this is a3984 * JS/Web-API built-in type/object) or `true` to try linking either3985 * to an internal or external target, which ever is found.3986 * @param {Boolean} [options.descriptions=true] - Whether to include descriptions.3987 * @param {String} [options.descDelimeter=" â "] - Description delimiter.3988 *3989 * @returns {String} -3990 */3991Utils.getFormattedTypeList = function (docsOrApis, list, options) {3992 if (!Array.isArray(list) || list.length === 0) return '';3993 var opts = options || {};3994 var delim = '<span class="code-delim">' + (opts.delimeter || '|') + '</span>';3995 var addDesc = typeof opts.descriptions !== 'boolean' ? true : opts.descriptions;3996 var descDelim = opts.descDelimeter || ' â ';3997 var desc = '';3998 var pList = list.map(function (item) {3999 if (addDesc) {4000 desc = Utils.parse(item.description || '', { keepIfSingle: true });4001 if (desc) desc = descDelim + desc;4002 }4003 if (item.type) {4004 // https://github.com/onury/docma/issues/554005 var types = (item.type.names || []).map(function (type) {4006 if (opts.links) {4007 var parsed = Utils._parseAnchorLinks(docsOrApis, type, {4008 linkType: opts.links4009 });4010 return Utils._wrapCode(parsed, false);4011 }4012 return Utils._wrapCode(type, true);4013 });4014 return types.join(delim) + desc;4015 }4016 // no type names, returning desc only4017 return desc ? 'â ' + desc : '';4018 });4019 if (pList.length > 1) {4020 return '<ul><li>' + pList.join('</li><li>') + '</li></ul>';4021 }4022 return pList; // single item4023};4024/**4025 * Gets HTML formatted list of emitted events from the given list. Event4026 * names items are wrapped with code tags. If multiple, formatted as an4027 * HTML unordered list.4028 * @name DocmaWeb.Utils.getEmittedEvents4029 * @function4030 *4031 * @param {Array|Object} docsOrApis - Documentation array or APIs object4032 * with signature `{ documentation:Array, symbols:Array }`.4033 * @param {Array} list - List of emitted (fired) events.4034 * @param {Object} [options] - Options.4035 * @param {String} [options.delimeter=", "] - Events delimeter.4036 * @param {Boolean|String} [options.links=false] - Whether to add4037 * HTML anchor links to output. Set to `"internal"` to link4038 * internally (to Docma route with symbol hash, if found) or4039 * `"external"` to link externally (to MDN URL if this is a4040 * JS/Web-API built-in type/object) or `true` to try linking either4041 * to an internal or external target, which ever is found.4042 *4043 * @returns {String} -4044 */4045Utils.getEmittedEvents = function (docsOrApis, list, options) {4046 if (!list || list.length === 0) return '';4047 var opts = options || {};4048 var delim = opts.delimeter || ', ';4049 // example:4050 // "fires": [4051 // "event:render - some desc." // this is incorrect. no desc allowed here.4052 // ]4053 var parts, name;4054 var events = (list || []).map(function (event) {4055 parts = event.split(/\s*[\s-â]\s*/g);4056 name = (parts[0] || '').trim(); // .replace(/event:/, '').trim()4057 if (opts.links) {4058 var parsed = Utils._parseAnchorLinks(docsOrApis, name, {4059 linkType: opts.links4060 });4061 return Utils._wrapCode(parsed, false);4062 }4063 return Utils._wrapCode(name, true);4064 });4065 return events.join(delim);4066};4067// ----------------------4068// PRIVATE4069// ----------------------4070/**4071 * Iterates and gets the first matching item in the array.4072 * @name DocmaWeb.Utils._find4073 * @function4074 * @private4075 *4076 * @param {Array} array4077 * Source array....
DocmaWeb.Utils.js
Source:DocmaWeb.Utils.js
...686Utils.parseTicks = function (string) {687 if (typeof string !== 'string') return '';688 return string689 .replace(/(```\s*)([\s\S]*?)(\s*```)/g, function (match, p1, p2) { // , p3, offset, string690 return Utils.normalizeTabs(Utils._wrapCode(p2, true, true).replace(/`/g, '`'));691 })692 .replace(/(`)(.*?)(`)/g, function (match, p1, p2) { // , p3, offset, string693 return Utils._wrapCode(p2, true);694 });695};696/**697 * Converts new lines to HTML paragraphs.698 * @name DocmaWeb.Utils.parseNewLines699 * @function700 *701 * @param {String} string - String to be parsed.702 * @param {Object} [options] - Parse options.703 * @param {Boolean} [options.keepIfSingle=false]704 * If `true`, lines will not be converted to paragraphs.705 *706 * @returns {String} -707 */708Utils.parseNewLines = function (string, options) {709 options = options || {};710 return Utils._tokenize(string, function (block, isCode) {711 if (isCode) return block;712 var parts = block.split(/[\r\n]{2,}/);713 if (parts.length <= 1 && options.keepIfSingle) return block;714 return parts.map(function (part) {715 return '<p>' + part + '</p>';716 }).join('');717 }).join('');718};719/**720 * Converts JSDoc `@link` directives to HTML anchor tags.721 * @name DocmaWeb.Utils.parseLinks722 * @function723 *724 * @param {String} string - String to be parsed.725 * @param {Object} [options] - Parse options.726 * @param {String} [options.target] - Href target. e.g. `"_blank"`727 *728 * @returns {String} -729 */730Utils.parseLinks = function (string, options) {731 if (typeof string !== 'string') return '';732 options = options || {};733 var re = /\{@link +([^}]*?)\}/g;734 var out = string.replace(re, function (match, p1) { // , offset, string735 var link, label,736 parts = p1.split('|');737 if (parts.length === 1) {738 link = label = parts[0].trim(); // eslint-disable-line739 } else {740 link = parts[0].trim();741 label = parts[1].trim();742 }743 // if does not look like a URL path, treat this as a symbol bookmark.744 // instead, we could check like this:745 // if (symbolNames && symbolNames.indexOf(link) >= 0) {..}746 // but it has too much overhead...747 if ((/[/?&=]/).test(link) === false && link[0] !== '#') link = '#' + link;748 var target = options.target749 ? ' target="' + options.target + '" rel="noopener noreferrer"'750 : '';751 return '<a href="' + link + '"' + target + '>' + label + '</a>';752 });753 return Utils.parseTicks(out);754};755/**756 * Parses the given string into proper HTML. Removes leading whitespace,757 * converts new lines to paragraphs, ticks to code tags and JSDoc links to758 * anchors.759 * @name DocmaWeb.Utils.parse760 * @function761 *762 * @param {String} string - String to be parsed.763 * @param {Object} [options] - Parse options.764 * @param {Object} [options.keepIfSingle=false]765 * If enabled, single lines will not be converted to paragraphs.766 * @param {String} [options.target]767 * Href target for links. e.g. `"_blank"`768 *769 * @returns {String} -770 */771Utils.parse = function (string, options) {772 options = options || {};773 string = Utils.trimLeft(string);774 string = Utils.parseNewLines(string, options);775 string = Utils.parseTicks(string);776 return Utils.parseLinks(string, options);777};778/**779 * Normalizes the number of spaces/tabs to multiples of 2 spaces, in the780 * beginning of each line. Useful for fixing mixed indets of a description781 * or example.782 * @name DocmaWeb.Utils.normalizeTabs783 * @function784 *785 * @param {String} string - String to process.786 *787 * @returns {String} -788 */789Utils.normalizeTabs = function (string) {790 if (typeof string !== 'string') return '';791 var m = string.match(/^\s*/gm),792 min = Infinity;793 m.forEach(function (wspace, index) {794 // tabs to spaces795 wspace = wspace.replace(/\t/g, ' ');796 // ignoring first line's indent797 if (index > 0) min = Math.min(wspace.length, min);798 });799 // replace the minimum indent from all lines (except first)800 if (min !== Infinity) {801 var re = new RegExp('^\\s{' + min + '}', 'g');802 string = string.replace(re, '');803 }804 // replace all leading spaces from first line805 string = string.replace(/^\s*/, '');806 var spaces;807 return string.replace(/([\r\n]+)(\s+)/gm, function (match, p1, p2) { // , offset, string808 // convert tabs to spaces809 spaces = p2.replace(/\t/g, ' ');810 // convert indent to multiples of 2811 spaces = new Array(spaces.length - (spaces.length % 2) + 1).join(' ');812 return p1 + spaces;813 });814};815/**816 * Builds a string of keywords from the given symbol.817 * This is useful for filter/search features of a template.818 * @name DocmaWeb.Utils.getKeywords819 * @function820 *821 * @param {Object} symbol - Target documentation symbol.822 * @returns {String} -823 */824Utils.getKeywords = function (symbol) {825 if (typeof symbol === 'string') return symbol.toLowerCase();826 var k = Utils.getFullName(symbol) + ' '827 + symbol.longname + ' '828 + symbol.name + ' '829 + (symbol.alias || '') + ' '830 + (symbol.memberOf || '') + ' '831 + (symbol.$kind || '') + ' '832 + (symbol.scope || '') + ' '833 + (symbol.classdesc || '') + ' '834 + (symbol.description || '') + ' '835 + (symbol.filename || '') + ' '836 + (symbol.readonly ? 'readonly' : '')837 + (symbol.isEnum ? 'enum' : '');838 if (Utils.isConstructor(symbol)) k += ' constructor';839 if (Utils.isMethod(symbol)) k += ' method';840 if (Utils.isProperty(symbol)) k += ' property';841 return k.replace(/[><"'`\n\r]/g, '').toLowerCase();842};843/**844 * Gets code file information from the given symbol.845 * @name DocmaWeb.Utils.getCodeFileInfo846 * @function847 *848 * @param {Object} symbol - Target documentation symbol.849 * @returns {Object} -850 */851Utils.getCodeFileInfo = function (symbol) {852 return {853 filename: Utils.notate(symbol, 'meta.filename'),854 lineno: Utils.notate(symbol, 'meta.lineno'),855 path: Utils.notate(symbol, 'meta.path')856 };857};858/**859 * Gets Docma route link for the given symbol or symbol name.860 * @name DocmaWeb.Utils.getSymbolLink861 * @function862 * @static863 *864 * @param {Array|Object} docsOrApis - Documentation array or APIs object865 * with signature `{ documentation:Array, symbols:Array }`.866 * @param {Object|String} symbolOrName - Either the symbol itself or the867 * name of the symbol.868 *869 * @returns {String} - Empty string if symbol is not found.870 */871Utils.getSymbolLink = function (docsOrApis, symbolOrName) {872 if (typeof symbolOrName !== 'string') {873 return symbolOrName.$docmaLink;874 }875 var symbol = Utils.getSymbolByName(docsOrApis, symbolOrName);876 return symbol ? symbol.$docmaLink : '';877};878var reEndBrackets = /\[\]$/;879// regexp for inspecting type parts such as `Map<String, Object>`,880// `Promise<Boolean|String>[]` or simply `Boolean`. this also881// removes/ignores dots from types such as Array.<String>882var reTypeParts = /^([^<]+?)(?:\.)?(?:<\(([^>)]+)\)>)?(?:<([^>]+)>)?(\[\])?$/;883function _link(docsOrApis, type, options) {884 var endBrackets = reEndBrackets.test(type) ? '[]' : '';885 var t = (type || '').replace(reEndBrackets, '');886 var opts = options || {};887 var link;888 var target = '';889 if (opts.linkType !== 'internal') {890 link = Utils._getTypeExternalLink(t);891 if (link) target = ' target="_blank" rel="noopener noreferrer"';892 }893 if (!link && opts.linkType !== 'external') link = Utils.getSymbolLink(docsOrApis, t);894 if (link) type = '<a href="' + link + '"' + target + '>' + (opts.displayText || t) + endBrackets + '</a>';895 return type;896}897/**898 * Gets Docma route link for the given symbol or symbol name and returns a899 * string with anchor tags.900 * @private901 *902 * @param {Array|Object} docsOrApis - Documentation array or APIs object903 * with signature `{ documentation:Array, symbols:Array }`.904 * @param {String} strType - Symbol type.905 * @param {String} [options] - Options906 * @param {String} [options.displayText] - Alternative display text to907 * be placed within the anchor tag.908 * @param {String} [options.linkType] - Set to `"internal"` (Docma909 * symbol link) or `"external"` (JS or Web-API MDN link), or omit to910 * get any of them, if found.911 *912 * @returns {String} -913 */914Utils._parseAnchorLinks = function (docsOrApis, strType, options) {915 // see reTypeParts and reEndBrackets916 var m = strType.match(reTypeParts);917 if (!m || !m[1]) return '';918 // maybe we have end brackets e.g. Boolean[] or Promise<Boolean>[]919 var endBrackets = m[4] || '';920 var sTypes = m[2] || m[3] || '';921 // check for multiple types e.g. Map<String, String>922 if (sTypes) {923 sTypes = sTypes.split(',').map(function (outerT) {924 // check for sub-types e.g. Promise<Boolean|String>925 return outerT926 .trim()927 .split('|')928 .map(function (t) {929 return _link(docsOrApis, t, options);930 })931 .join('<span class="code-delim">|</span>');932 }).join('<span class="code-delim">, </span>');933 }934 if (sTypes) sTypes = '<' + sTypes + '>';935 // check for sub-types e.g. Promise<Boolean|String>936 return _link(docsOrApis, m[1], options) + sTypes + endBrackets;937};938/**939 * Gets the types of the symbol as a string (joined with pipes `|`).940 * @name DocmaWeb.Utils.getTypes941 * @function942 *943 * @param {Array|Object} docsOrApis - Documentation array or APIs object944 * with signature `{ documentation:Array, symbols:Array }`.945 * @param {Object} symbol - Target documentation symbol.946 * @param {Object} [options] - Options.947 * @param {Boolean|String} [options.links=false] - Whether to add948 * HTML anchor links to output. Set to `"internal"` to link949 * internally (to Docma route with symbol hash, if found) or950 * `"external"` to link externally (to MDN URL if this is a951 * JS/Web-API built-in type/object) or `true` to try linking either952 * to an internal or external target, which ever is found.953 *954 * @returns {String} -955 *956 * @example957 * var symbol = { "type": { "names": ["Number", "String"] } };958 * DocmaWeb.Utils.getTypes(docs, symbol); // "Number|String"959 */960Utils.getTypes = function (docsOrApis, symbol, options) {961 var opts = options || {};962 var types = symbol.kind === 'class'963 ? ['class']964 : Utils.notate(symbol, 'type.names') || [];965 types = types.map(function (type) {966 if (opts.links) type = Utils._parseAnchorLinks(docsOrApis, type, { linkType: opts.links });967 return type;968 }).join('<span class="code-delim">|</span>');969 return symbol.isEnum ? 'enum<' + types + '>' : types;970};971// e.g.972// "returns": [973// {974// "type": { "names": ["Date"] },975// "description": "- Current date."976// }977// ]978/**979 * Gets the return types of the symbol as a string (joined with pipes `|`).980 * @name DocmaWeb.Utils.getReturnTypes981 * @function982 *983 * @param {Array|Object} docsOrApis - Documentation array or APIs object984 * with signature `{ documentation:Array, symbols:Array }`.985 * @param {Object} symbol - Target documentation symbol.986 * @param {Object} [options] - Options.987 * @param {Boolean|String} [options.links=false] - Whether to add988 * HTML anchor links to output. Set to `"internal"` to link989 * internally (to Docma route with symbol hash, if found) or990 * `"external"` to link externally (to MDN URL if this is a991 * JS/Web-API built-in type/object) or `true` to try linking either992 * to an internal or external target, which ever is found.993 *994 * @returns {String} -995 */996Utils.getReturnTypes = function (docsOrApis, symbol, options) {997 var ret = symbol.returns;998 if (!Array.isArray(ret)) return 'void';999 var opts = options || {};1000 var allTypes = ret.reduce(function (memo, r) {1001 var types = Utils.notate(r, 'type.names') || [];1002 if (opts.links) {1003 types = types.map(function (type) {1004 return Utils._parseAnchorLinks(docsOrApis, type, { linkType: opts.links });1005 });1006 }1007 return memo.concat(types);1008 }, []);1009 return allTypes.length > 01010 ? allTypes.join('<span class="code-delim">|</span>')1011 : 'void';1012};1013/**1014 * Gets HTML formatted, delimeted code tags.1015 * @name DocmaWeb.Utils.getCodeTags1016 * @function1017 *1018 * @param {Array|Object} docsOrApis - Documentation array or APIs object1019 * with signature `{ documentation:Array, symbols:Array }`.1020 * @param {Array} list - String list of values to be placed within code1021 * tags.1022 * @param {Object} [options] - Options.1023 * @param {String} [options.delimeter=","] - String delimeter.1024 * @param {Boolean|String} [options.links=false] - Whether to add1025 * HTML anchor links to output. Set to `"internal"` to link1026 * internally (to Docma route with symbol hash, if found) or1027 * `"external"` to link externally (to MDN URL if this is a1028 * JS/Web-API built-in type/object) or `true` to try linking either1029 * to an internal or external target, which ever is found.1030 *1031 * @returns {String} -1032 */1033Utils.getCodeTags = function (docsOrApis, list, options) {1034 var opts = options || {};1035 return list.map(function (item) {1036 if (opts.links) {1037 var parsed = Utils._parseAnchorLinks(docsOrApis, item, {1038 linkType: opts.links1039 });1040 return Utils._wrapCode(parsed, false);1041 }1042 return Utils._wrapCode(item, true);1043 }).join(opts.demileter || ',');1044};1045/**1046 * Gets HTML formatted list of types from the given symbols list. Type1047 * items are wrapped with code tags. If multiple, formatted as an HTML1048 * unordered list.1049 * @name DocmaWeb.Utils.getFormattedTypeList1050 * @function1051 *1052 * @param {Array|Object} docsOrApis - Documentation array or APIs object1053 * with signature `{ documentation:Array, symbols:Array }`.1054 * @param {Array} list - List of symbols to be converted to formatted1055 * string.1056 * @param {Object} [options] - Format options.1057 * @param {String} [options.delimeter="|"] - Types delimeter.1058 * @param {Boolean|String} [options.links=false] - Whether to add1059 * HTML anchor links to output. Set to `"internal"` to link1060 * internally (to Docma route with symbol hash, if found) or1061 * `"external"` to link externally (to MDN URL if this is a1062 * JS/Web-API built-in type/object) or `true` to try linking either1063 * to an internal or external target, which ever is found.1064 * @param {Boolean} [options.descriptions=true] - Whether to include descriptions.1065 * @param {String} [options.descDelimeter=" â "] - Description delimiter.1066 *1067 * @returns {String} -1068 */1069Utils.getFormattedTypeList = function (docsOrApis, list, options) {1070 if (!Array.isArray(list) || list.length === 0) return '';1071 var opts = options || {};1072 var delim = '<span class="code-delim">' + (opts.delimeter || '|') + '</span>';1073 var addDesc = typeof opts.descriptions !== 'boolean' ? true : opts.descriptions;1074 var descDelim = opts.descDelimeter || ' â ';1075 var desc = '';1076 var pList = list.map(function (item) {1077 if (addDesc) {1078 desc = Utils.parse(item.description || '', { keepIfSingle: true });1079 if (desc) desc = descDelim + desc;1080 }1081 if (item.type) {1082 // https://github.com/onury/docma/issues/551083 var types = (item.type.names || []).map(function (type) {1084 if (opts.links) {1085 var parsed = Utils._parseAnchorLinks(docsOrApis, type, {1086 linkType: opts.links1087 });1088 return Utils._wrapCode(parsed, false);1089 }1090 return Utils._wrapCode(type, true);1091 });1092 return types.join(delim) + desc;1093 }1094 // no type names, returning desc only1095 return desc ? 'â ' + desc : '';1096 });1097 if (pList.length > 1) {1098 return '<ul><li>' + pList.join('</li><li>') + '</li></ul>';1099 }1100 return pList; // single item1101};1102/**1103 * Gets HTML formatted list of emitted events from the given list. Event1104 * names items are wrapped with code tags. If multiple, formatted as an1105 * HTML unordered list.1106 * @name DocmaWeb.Utils.getEmittedEvents1107 * @function1108 *1109 * @param {Array|Object} docsOrApis - Documentation array or APIs object1110 * with signature `{ documentation:Array, symbols:Array }`.1111 * @param {Array} list - List of emitted (fired) events.1112 * @param {Object} [options] - Options.1113 * @param {String} [options.delimeter=", "] - Events delimeter.1114 * @param {Boolean|String} [options.links=false] - Whether to add1115 * HTML anchor links to output. Set to `"internal"` to link1116 * internally (to Docma route with symbol hash, if found) or1117 * `"external"` to link externally (to MDN URL if this is a1118 * JS/Web-API built-in type/object) or `true` to try linking either1119 * to an internal or external target, which ever is found.1120 *1121 * @returns {String} -1122 */1123Utils.getEmittedEvents = function (docsOrApis, list, options) {1124 if (!list || list.length === 0) return '';1125 var opts = options || {};1126 var delim = opts.delimeter || ', ';1127 // example:1128 // "fires": [1129 // "event:render - some desc." // this is incorrect. no desc allowed here.1130 // ]1131 var parts, name;1132 var events = (list || []).map(function (event) {1133 parts = event.split(/\s*[\s-â]\s*/g);1134 name = (parts[0] || '').trim(); // .replace(/event:/, '').trim()1135 if (opts.links) {1136 var parsed = Utils._parseAnchorLinks(docsOrApis, name, {1137 linkType: opts.links1138 });1139 return Utils._wrapCode(parsed, false);1140 }1141 return Utils._wrapCode(name, true);1142 });1143 return events.join(delim);1144};1145// ----------------------1146// PRIVATE1147// ----------------------1148/**1149 * Iterates and gets the first matching item in the array.1150 * @name DocmaWeb.Utils._find1151 * @function1152 * @private1153 *1154 * @param {Array} array1155 * Source array....
brew.js
Source:brew.js
...360 * and then executes provided script.361 */362 async promise () {363 await this.loadScripts()364 const code = await this._wrapCode()365 await fsExtra.ensureFile(this.ctx.outputPath)366 await fsExtra.ensureFile(this.ctx.logPath)367 await fsExtra.writeFile(this.ctx.scriptPath, code)368 this.unsetCode()369 await AfterEffects.runScript(this.ctx.scriptPath)370 this.closeChat()371 return Brew.loadOutput(this.ctx.outputPath)372 }...
uModule.js
Source:uModule.js
...112 //console.log("AlteredSource, first pass:\n", alteredSource);113 alteredSource = this.astUtil.injectTracing(alteredSource);114 console.log("AlteredSource, second pass:\n", alteredSource);115 //wrap modified source with module elements 116 var endSource = this._wrapCode(alteredSource);117 //compile "module"118 console.log("compiling");119 var startTime = new Date();120 try121 {122 var f = new Function(endSource);123 var fn = f();124 var result = fn.call(fn, this.exports, this.include, this.importGeom, this, this.name , this.assembly)125 console.log("result",this.assembly,this.partInstancesByType, this.codeLocToinstances);126 }127 catch(error)128 {129 console.log("failed to compile:", error.name + ': ' + error.message);130 }...
dotnetXmlDocumentation.js
Source:dotnetXmlDocumentation.js
...53 _wrapInNode('para', _wrapAndEscape(node, maxColumns), summary);54 else55 summary.push(..._wrapAndEscape(node, maxColumns));56 } else if (node.type === 'code' && node.codeLang === 'csharp') {57 _wrapInNode('code', _wrapCode(node.lines), summary);58 } else if (node.type === 'li') {59 _wrapInNode('item><description', _wrapAndEscape(node, maxColumns), summary, '/description></item');60 } else if (node.type === 'note') {61 _wrapInNode('para', _wrapAndEscape(node, maxColumns), remarks);62 }63 lastNode = node;64 });65 handleListItem(lastNode, null);66 return { summary, remarks };67}68function _wrapCode(lines) {69 let i = 0;70 let out = [];71 for (let line of lines) {72 line = line.replace(/[&]/g, '&').replace(/</g, '<').replace(/>/g, '>');73 if (i < lines.length - 1)74 line = line + "<br/>";75 out.push(line);76 i++;77 }78 return out;79}80function _wrapInNode(tag, nodes, target, closingTag = null) {81 if (nodes.length === 0)82 return;...
xmlDocumentation.js
Source:xmlDocumentation.js
...53 _wrapInNode('para', _wrapAndEscape(node, maxColumns), summary);54 else55 summary.push(..._wrapAndEscape(node, maxColumns));56 } else if (node.type === 'code' && node.codeLang === 'csharp') {57 _wrapInNode('code', _wrapCode(node.lines), summary);58 } else if (node.type === 'li') {59 _wrapInNode('item><description', _wrapAndEscape(node, maxColumns), summary, '/description></item');60 } else if (node.type === 'note') {61 _wrapInNode('para', _wrapAndEscape(node, maxColumns), remarks);62 }63 lastNode = node;64 });65 handleListItem(lastNode, null);66 return { summary, remarks };67}68function _wrapCode(lines) {69 let i = 0;70 let out = [];71 for (let line of lines) {72 line = line.replace(/[&]/g, '&').replace(/</g, '<').replace(/>/g, '>');73 if (i < lines.length - 1)74 line = line + "<br/>";75 out.push(line);76 i++;77 }78 return out;79}80function _wrapInNode(tag, nodes, target, closingTag = null) {81 if (nodes.length === 0)82 return;...
omPreDialog.js
Source:omPreDialog.js
...17 * @param wrapper18 * @return {*}19 * @private20 */21 var _wrapCode = function _wrapCode(code, wrapper) {22 return _tags[wrapper].open + code + _tags[wrapper].close;23 }24 /**25 * Encode common HTML elements26 * @param text27 * @return {*|void}28 * @private29 */30 var _processCode = function _processCode(content, spaces) {31 content = content.replace(_encRegex, function (char) {32 return '&' + _encoding[char] + ';';33 });34 // replace tab with spaces35 if (spaces) content = content.replace(/\t/g, ' ');36 return content;37 }38 return {39 getModalBody: function () {40 var style = 'float:left;margin-right:8px;';41 return [42 {43 type: 'textbox',44 name: 'omCode',45 label: '',46 value: this.getContent(),47 multiline: true,48 autofocus: true,49 minWidth: 820,50 minHeight: 42051 },52 {53 type: 'container',54 style: "height:32px",55 items: [56 {57 type: 'listbox',58 name: 'omCodeWrapper',59 style: style,60 value: this.getCodeWrapper(),61 values: [62 {text: '<pre><code>', value: 'precode'},63 {text: '<pre>', value: 'pre'},64 {text: '<code>', value: 'code'}65 ]66 },67 {name: 'omSpaces', type: 'checkbox', checked: true, text: 'nahradit taby mezerama', style: style + 'margin-top: 6px'}68 ]69 }70 ]71 },72 init: function () {73 // Dinamically init the decoding dictionary and the encoding regex74 var char_list = '';75 for (var ch in _encoding) {76 char_list += ch;77 _decDictionary[ _encoding[ch] ] = ch78 }79 _encRegex = new RegExp('[' + char_list + ']', 'g');80 },81 open: function (editor, url) {82 _editor = editor;83 _node = editor.selection.getNode(); // current node84 _modal = editor.windowManager.open({85 id: 'omPreDialog_wrapper',86 title: 'Vložit preformátovaný kód',87 pading: 0,88 dialogClass: 'wp-dialog',89 zIndex: 99999,90 body: this.getModalBody(),91 onsubmit: function (e) {92 if (e.data.omCode) {93 console.log(e.data);94 omPreDialog.updateContent(95 e.data.omCode,96 e.data.omCodeWrapper,97 e.data.omSpaces98 )99 } else {100 e.preventDefault();101 }102 }103 }104 );105 },106 getCodeWrapper: function () {107 if (_editor.selection.getContent() || _node.nodeName == 'CODE') return 'code';108 if (_node.nodeName == 'PRE') return 'pre';109 if (_node.nodeName == 'CODE' && _node.parentNode.nodeName == 'PRE') return 'precode';110 },111 getContent: function () {112 if (_node.nodeName == 'PRE' || _node.nodeName == 'CODE') {113 return _editor.selection.getNode().innerText;114 }115 if (_editor.selection.getContent()) return _editor.selection.getContent();116 },117 updateContent: function (code, wrapper, spaces) {118 var code = _wrapCode(_processCode(code, spaces), wrapper); // handle code119 // have some tags? select them120 if (_node.nodeName == 'PRE' || _node.nodeName == 'CODE') {121 if (_node.nodeName == 'CODE' && _node.parentNode.nodeName == 'PRE') {122 _editor.selection.select(_node.parentNode);123 } else {124 _editor.selection.select(_node);125 }126 }127 // split paragraph to two new when128 if (_node.nodeName == 'CODE' && _node.parentNode.nodeName == 'P' && wrapper != 'code') _node.remove();129 if (_editor.selection.getContent()) {130 return _editor.selection.setContent(code);131 }132 // just insert new one...
babel.js
Source:babel.js
...28 log.info(`Transforming file: ${resource.getPath()}`)29 }30 const code = await resource.getString()31 const result = await babel.transformAsync(code)32 const transformed = wrap ? _wrapCode(result.code) : result.code33 resource.setString(transformed)34 await workspace.write(resource)35 }))...
Using AI Code Generation
1const playwright = require('playwright');2(async () => {3 const browser = await playwright.chromium.launch();4 const context = await browser.newContext();5 const page = await context.newPage();6 const originalFunction = page.evaluate;7 page.evaluate = function (pageFunction, ...args) {8 const wrappedFunction = playwright._wrapCode(pageFunction);9 return originalFunction.call(this, wrappedFunction, ...args);10 };11 await page.evaluate(() => {12 console.log('Hello from page!');13 });14 await browser.close();15})();
Using AI Code Generation
1const { _wrapCode } = require('playwright/lib/utils/stackTrace');2const { test } = require('@playwright/test');3test('test', async ({ page }) => {4 await _wrapCode(async () => {5 await page.click('text=Get started');6 await page.click('text=Docs');7 });8});
Using AI Code Generation
1const { _wrapCode } = require('playwright/lib/internal/inspectorInstrumentation');2const { _instrument } = require('playwright/lib/internal/inspectorInstrumentation');3const { _instrumentObject } = require('playwright/lib/internal/inspectorInstrumentation');4const { _instrumentObject } = require('playwright/lib/internal/inspectorInstrumentation');5const { _instrument } = require('playwright/lib/internal/inspectorInstrumentation');6const { _instrument } = require('playwright/lib/internal/inspectorInstrumentation');7const { _wrapCode } = require('playwright/lib/internal/inspectorInstrumentation');8const { _instrumentObject } = require('playwright/lib/internal/inspectorInstrumentation');9const { _instrument } = require('playwright/lib/internal/inspectorInstrumentation');10const { _wrapCode } = require('playwright/lib/internal/inspectorInstrumentation');11const { _instrumentObject } = require('playwright/lib/internal/inspectorInstrumentation');12const { _instrument } = require('playwright/lib/internal/inspectorInstrumentation');13const { _wrapCode } = require('playwright/lib/internal/inspectorInstrumentation');14const { _instrumentObject } = require('playwright/lib/internal/inspectorInstrumentation');15const { _instrument } = require('playwright/lib/internal/inspectorInstrumentation');16const { _wrapCode } = require('playwright/lib/internal/inspectorInstrumentation');17const { _instrumentObject } = require('playwright/lib/internal/inspectorInstrumentation');18const { _instrument
Using AI Code Generation
1const { _wrapCode } = require('playwright/lib/server/frames');2const { Page } = require('playwright/lib/server/page');3const { assert } = require('chai');4describe('Playwright Internal', function () {5 it('should wrap code', async function () {6 const page = new Page();7 const code = 'return 1 + 2;';8 const wrappedCode = _wrapCode(code, 'test.js');9 const result = await page._delegate._evaluateExpression(10 );11 assert.equal(result, 3);12 });13});14[Example](
Using AI Code Generation
1const { _wrapCode } = require('playwright/lib/server/frames');2const { Frame } = require('playwright/lib/server/frames');3const { assert } = require('console');4const { assertEqual } = require('playwright/lib/utils/utils');5const { test } = require('playwright/lib/test');6const frame = new Frame();7const code = 'return 1 + 2';8const wrapper = _wrapCode(code, url);9test('test', async ({ page }) => {10 const result = await frame._evaluateExpression(wrapper, true, 'utility');11 assert.equal(result, 3);12});
Using AI Code Generation
1const playwright = require('playwright');2const { _wrapCode } = require('playwright/lib/server/inspector/inspector');3const { context } = playwright.chromium;4 const { chromium } = require('playwright');5 (async () => {6 const browser = await chromium.launch();7 const page = await browser.newPage();8 await browser.close();9 })();10`;11const wrappedCode = _wrapCode(code);12console.log(wrappedCode);13const playwright = require('playwright');14const { _wrapCode } = require('playwright/lib/server/inspector/inspector');15const { context } = playwright.chromium;16 const { chromium } = require('playwright');17 (async () => {18 const browser = await chromium.launch();19 const page = await browser.newPage();20 await browser.close();21 })();22`;23const wrappedCode = _wrapCode(code);24console.log(wrappedCode);25const playwright = require('playwright');26const { _wrapCode } = require('playwright/lib/server/inspector/inspector');27const { context } = playwright.chromium;28 const { chromium } = require('playwright');29 (async () => {30 const browser = await chromium.launch();31 const page = await browser.newPage();32 await browser.close();33 })();34`;35const wrappedCode = _wrapCode(code);36console.log(wrappedCode);37const playwright = require('playwright');38const { _wrapCode } = require('playwright/lib/server/inspector/inspector');39const { context } = playwright.chromium;40 const { chromium } = require('playwright');41 (async () => {42 const browser = await chromium.launch();
Using AI Code Generation
1const { Internal } = require("playwright");2const { wrapCode } = new Internal();3const { parse } = require("recast");4const { getTestInfo } = require("./utils");5const { createTestFile } = require("./createTestFile");6const code = `const { test } = require("@playwright/test");7test('basic test', async ({ page }) => {8});`;9const wrappedCode = wrapCode(code, {10});11const testInfo = getTestInfo(wrappedCode);12createTestFile(testInfo);13const { Internal } = require("playwright");14const { wrapCode } = new Internal();15const { parse } = require("recast");16const { getTestInfo } = require("./utils");17const { createTestFile } = require("./createTestFile");18const code = `const { test } = require("@playwright/test");19test('basic test', async ({ page }) => {20});`;21const wrappedCode = wrapCode(code, {22});23const testInfo = getTestInfo(wrappedCode);24createTestFile(testInfo);25const { Internal } = require("playwright");26const { wrapCode } = new Internal();27const { parse } = require("recast");28const { getTestInfo } = require("./utils");29const { createTestFile } = require("./createTestFile");30const code = `const { test } = require("@playwright/test");31test('basic test', async ({ page }) => {
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!!