From 181a2b097acf9bda55a31d459f80d97e8ab43e41 Mon Sep 17 00:00:00 2001 From: Tyler Biethman Date: Tue, 21 Jun 2022 12:51:18 -0500 Subject: [PATCH 01/18] Trigger Build From b90712743a38f98d6f355887db0a111fe14c7f66 Mon Sep 17 00:00:00 2001 From: Tyler Biethman Date: Tue, 21 Jun 2022 16:00:23 -0500 Subject: [PATCH 02/18] chore: updating version (#22432) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fe91cf53b141..f41dc4328b5d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cypress", - "version": "10.1.0", + "version": "10.2.0", "description": "Cypress.io end to end testing tool", "private": true, "scripts": { From f2f0652743b1faace5794bf94907832c4f67228e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 21 Jun 2022 21:24:05 +0000 Subject: [PATCH 03/18] chore: Update Chrome (beta) to 103.0.5060.53 (#22351) Co-authored-by: cypress-bot[bot] <2f0651858c6e38e0+cypress-bot[bot]@users.noreply.github.com> Co-authored-by: Matt Henkes --- browser-versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/browser-versions.json b/browser-versions.json index 423d9c28e419..f65fc03af208 100644 --- a/browser-versions.json +++ b/browser-versions.json @@ -1,4 +1,4 @@ { - "chrome:beta": "103.0.5060.42", + "chrome:beta": "103.0.5060.53", "chrome:stable": "102.0.5005.115" } From 2603f013ac106704277f38cc8a2067a264b2a9de Mon Sep 17 00:00:00 2001 From: Ely Lucas Date: Wed, 22 Jun 2022 08:06:38 -0600 Subject: [PATCH 04/18] chore: update readme logo (#22433) * chore: updating cypress logo in readme * fixing image * resizing images --- README.md | 8 +++++++- assets/cypress-logo-dark.png | Bin 0 -> 17723 bytes assets/cypress-logo-light.png | Bin 0 -> 17670 bytes 3 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 assets/cypress-logo-dark.png create mode 100644 assets/cypress-logo-light.png diff --git a/README.md b/README.md index 5ed74849fdc5..d10a70893421 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,11 @@

- + + + + + Cypress Logo + +

Documentation | diff --git a/assets/cypress-logo-dark.png b/assets/cypress-logo-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..97ced299171f97df744b0f3cb7ab8fbf867bc7ca GIT binary patch literal 17723 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 F2>_5i8V&#e literal 0 HcmV?d00001 From a8f5e59b7dfabebb17c8be5f0f226d3982043f68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Barth=C3=A9l=C3=A9my=20Ledoux?= Date: Wed, 22 Jun 2022 10:35:55 -0500 Subject: [PATCH 05/18] refactor: use design system windicss config (#21503) * chore: use design system windi config * fix: windi config should have colors in the right place * fix: remove direct dependencies to old windi * upgrade css plugin for types * update windi plugin * refactor: update without the safelist Co-authored-by: Zachary Williams --- packages/app/package.json | 2 - packages/app/windi.config.ts | 7 +- packages/frontend-shared/.windicss/colors.ts | 195 ------------------ .../.windicss/icon-color-plugins.ts | 141 ------------- .../frontend-shared/.windicss/safelist.ts | 27 --- .../frontend-shared/.windicss/shortcuts.ts | 26 --- packages/frontend-shared/package.json | 3 +- .../script/generate-shiki-theme-ts.ts | 2 +- packages/frontend-shared/vite.config.ts | 16 +- packages/frontend-shared/windi.config.ts | 57 +---- packages/launchpad/package.json | 1 - packages/launchpad/windi.config.ts | 7 +- yarn.lock | 126 +++++++---- 13 files changed, 117 insertions(+), 493 deletions(-) delete mode 100644 packages/frontend-shared/.windicss/colors.ts delete mode 100644 packages/frontend-shared/.windicss/icon-color-plugins.ts delete mode 100644 packages/frontend-shared/.windicss/safelist.ts delete mode 100644 packages/frontend-shared/.windicss/shortcuts.ts diff --git a/packages/app/package.json b/packages/app/package.json index 2f064685b791..99d9eebea668 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -34,7 +34,6 @@ "@vitejs/plugin-vue": "2.2.4", "@vitejs/plugin-vue-jsx": "1.3.8", "@vueuse/core": "7.2.2", - "@windicss/plugin-interaction-variants": "1.0.0", "ansi-to-html": "0.6.14", "bluebird": "3.5.3", "classnames": "2.3.1", @@ -69,7 +68,6 @@ "vue-i18n": "9.2.0-beta.7", "vue-router": "4", "vue-tsc": "^0.3.0", - "windicss": "3.1.4", "wonka": "^4.0.15" }, "files": [ diff --git a/packages/app/windi.config.ts b/packages/app/windi.config.ts index e68499f9350c..37cd764edfe4 100644 --- a/packages/app/windi.config.ts +++ b/packages/app/windi.config.ts @@ -1,4 +1,5 @@ -import { defaultConfig } from '@packages/frontend-shared/windi.config' -import { defineConfig } from 'windicss/helpers' +/** + * This file is used for vscode plugin autocompletion of windi colors + */ -export default defineConfig(defaultConfig) +export { default } from '@packages/frontend-shared/windi.config' diff --git a/packages/frontend-shared/.windicss/colors.ts b/packages/frontend-shared/.windicss/colors.ts deleted file mode 100644 index 7f3f5a9aba1e..000000000000 --- a/packages/frontend-shared/.windicss/colors.ts +++ /dev/null @@ -1,195 +0,0 @@ -// NOTE: All the colors in this file are also temporarily stored in packages/reporter/src/lib/variables.scss, for use in the reporter. If you change any here, please also change them there. - -import Colors from 'windicss/colors' - -const customColors = { - jade: { - 50: '#E4FBF2', - 100: '#C2F1DE', - 200: '#A3E7CB', - 300: '#69D3A7', - 400: '#1FA971', - 500: '#00814D', - 600: '#005F39', - 700: '#00442A', - 800: '#003220', - 900: '#00291B', - 1000: '#00261A', - }, - red: { - 50: '#FBEFF1', - 100: '#FAD9DF', - 200: '#F8C4CD', - 300: '#F59AA9', - 400: '#E45770', - 500: '#C62B49', - 600: '#9F1331', - 700: '#7A0723', - 800: '#5E021B', - 900: '#4F0018', - 1000: '#490018', - }, - orange: { - 50: '#F5F4D7', - 100: '#F3ECB3', - 200: '#F1E08F', - 300: '#EDBB4A', - 400: '#DB7903', - 500: '#BD5800', - 600: '#963F00', - 700: '#702C00', - 800: '#521F00', - 900: '#411800', - 1000: '#391500', - }, - indigo: { - 50: '#F0F1FF', - 100: '#DADDFE', - 200: '#C5C9FD', - 300: '#9AA2FC', - 400: '#6470F3', - 500: '#4956E3', - 600: '#3A46CC', - 700: '#2F3AB0', - 800: '#252E8F', - 900: '#1C236D', - 1000: '#151A50', - }, - gray: { - 50: '#F3F4FA', - 100: '#E1E3ED', - 200: '#D0D2E0', - 300: '#BFC2D4', - 400: '#AFB3C7', - 500: '#9095AD', - 600: '#747994', - 700: '#5A5F7A', - 800: '#434861', - 900: '#2E3247', - 1000: '#1B1E2E', - }, - teal: { - 50: '#E0F6FA', - 100: '#B7E7F0', - 200: '#90D9E6', - 300: '#4BBFD2', - 400: '#0097A8', - 500: '#007780', - 600: '#00595D', - 700: '#004143', - 800: '#003131', - 900: '#002828', - 1000: '#002525', - }, - purple: { - 50: '#F5F0FB', - 100: '#E9DDFA', - 200: '#DECBF8', - 300: '#C8A7F5', - 400: '#A06CE4', - 500: '#7F43C9', - 600: '#632AA6', - 700: '#4B1A83', - 800: '#3B1268', - 900: '#320E58', - 1000: '#2F0C52', - }, - green: { - 50: '#F5F5D0', - 100: '#E7E8AB', - 200: '#DADC89', - 300: '#BDC44D', - 400: '#849706', - 500: '#5B7100', - 600: '#405500', - 700: '#2E4000', - 800: '#233200', - 900: '#1C2A00', - 1000: '#192500', - }, - fuchsia: { - 50: '#FAEFFB', - 100: '#F7DAF9', - 200: '#F3C6F8', - 300: '#ED9FF4', - 400: '#D65FE3', - 500: '#B735C7', - 600: '#901CA2', - 700: '#6C0F7E', - 800: '#510862', - 900: '#400651', - 1000: '#39054A', - }, - magenta: { - 50: '#FCEEF5', - 100: '#FADAEA', - 200: '#F9C5DF', - 300: '#F69ECA', - 400: '#E45DA3', - 500: '#C53282', - 600: '#9C1964', - 700: '#750C4D', - 800: '#59063D', - 900: '#490435', - 1000: '#420333', - }, -} - -export const cyColors = { - ...customColors, - primary: { - ...customColors.indigo, - DEFAULT: customColors.indigo[500], - }, - secondary: { - ...customColors.indigo, - DEFAULT: customColors.indigo[50], - }, - error: { - ...customColors.red, - DEFAULT: customColors.red[400], - }, - caution: { - ...customColors.red, - DEFAULT: customColors.red[500], - }, - info: { - ...customColors.indigo, - DEFAULT: customColors.indigo[500], - }, - warning: { - ...customColors.orange, - DEFAULT: customColors.orange[500], - }, - 'warning-light': { - ...customColors.orange, - DEFAULT: customColors.orange[400], - }, - success: { - ...customColors.jade, - DEFAULT: customColors.jade[400], - }, - 'success-light': { - ...customColors.jade, - DEFAULT: customColors.jade[300], - }, - confirm: { - ...customColors.jade, - DEFAULT: customColors.jade[500], - }, - 'body-gray': { - ...customColors.gray, - DEFAULT: customColors.gray[600], - }, -} - -// filter out this deprecated color to remove the annoying warning -const FilteredColors = Object.keys(Colors).reduce((acc, key) => { - if (key !== 'lightBlue') { - acc[key] = Colors[key] - } - - return acc -}, {}) - -export const colors = { ...FilteredColors, ...cyColors } diff --git a/packages/frontend-shared/.windicss/icon-color-plugins.ts b/packages/frontend-shared/.windicss/icon-color-plugins.ts deleted file mode 100644 index 28c69f52daf9..000000000000 --- a/packages/frontend-shared/.windicss/icon-color-plugins.ts +++ /dev/null @@ -1,141 +0,0 @@ -/** - * This package adds support for targeting - * light vs dark classes in duotone icons. - * - * It works by adding utility classes and specific selectors - */ - -import createPlugin from 'windicss/plugin' -import { reduce, kebabCase, isObject } from 'lodash' -import { colors } from './colors' - -interface RuleConfig { - name: string - theme?: (key: string) => string - weight?: string - color?: string -} - -const makeRuleForClass = ({ name, theme, weight, color }: RuleConfig) => { - const resolvedColor = color ? color : weight ? theme?.(`colors.${name}.${weight}`) : theme?.(`colors.${name}`) - let [lightKey, darkKey, secondaryLightKey, secondaryDarkKey] = [`.icon-light-${name}`, `.icon-dark-${name}`, `.icon-light-secondary-${name}`, `.icon-dark-secondary-${name}`] - - // transparent, black, and white - if (weight) { - lightKey += `-${weight}` - darkKey += `-${weight}` - secondaryLightKey += `-${weight}` - secondaryDarkKey += `-${weight}` - } - - return { - // When we're targeting an svg with icon-light-red-500 - // only attach the fill and stroke for those same icons - // and vice versa for icon-dark - [lightKey]: { - '> *[fill].icon-light': { - fill: resolvedColor, - }, - '> *[stroke].icon-light': { - stroke: resolvedColor, - }, - '> *[fill][stroke].icon-light-fill': { - fill: resolvedColor, - }, - '> *[fill][stroke].icon-light-stroke': { - stroke: resolvedColor, - }, - }, - [secondaryLightKey]: { - '> *[fill].icon-light-secondary': { - fill: resolvedColor, - }, - '> *[stroke].icon-light-secondary': { - stroke: resolvedColor, - }, - '> *[fill][stroke].icon-light-secondary-fill': { - fill: resolvedColor, - }, - '> *[fill][stroke].icon-light-secondary-stroke': { - stroke: resolvedColor, - }, - }, - [darkKey]: { - '> *[fill].icon-dark': { - fill: resolvedColor, - }, - '> *[stroke].icon-dark': { - stroke: resolvedColor, - }, - '> *[fill][stroke].icon-dark-fill': { - fill: resolvedColor, - }, - '> *[fill][stroke].icon-dark-stroke': { - stroke: resolvedColor, - }, - }, - [secondaryDarkKey]: { - '> *[fill].icon-dark-secondary': { - fill: resolvedColor, - }, - '> *[stroke].icon-dark-secondary': { - stroke: resolvedColor, - }, - '> *[fill][stroke].icon-dark-secondary-fill': { - fill: resolvedColor, - }, - '> *[fill][stroke].icon-dark-secondary-stroke': { - stroke: resolvedColor, - }, - }, - } -} - -function addIconUtilityClasses (theme) { - return reduce(colors, (acc, variants, colorName) => { - // lightGray => light-gray - const name = kebabCase(colorName) - - // Collect the classes we're going to add to the windicss class registry - let additionalClasses = {} - - // There are both nested and not-nested colors (e.g. black, white) - if (isObject(variants)) { - // multiple levels of colors - additionalClasses = reduce(variants, (variantAcc, _, weight) => { - const rules = makeRuleForClass({ name, theme, weight }) - - return { ...variantAcc, ...rules } - }, {}) - } else { - // single values like black, white - additionalClasses = makeRuleForClass({ name, theme }) - } - - // Output is an object where each new class is a key - // And the selectors and values affected are values - /** - * { - * `.icon-light-jade-500`: { - * '> *[stroke].icon-light': { - * stroke: resolvedColor - * }, - * '> *[fill].icon-light': { - * fill: resolvedColor - * } - * } - * } - */ - return { ...acc, ...additionalClasses } - }, { - - // These technically aren't under "colors" - ...makeRuleForClass({ name: 'transparent', color: 'transparent' }), - ...makeRuleForClass({ name: 'current', color: 'currentColor' }), - }) -} - -export const IconDuotoneColorsPlugin = createPlugin(({ theme, addUtilities }) => { - // @ts-ignore - dunno - addUtilities(addIconUtilityClasses(theme)) -}) diff --git a/packages/frontend-shared/.windicss/safelist.ts b/packages/frontend-shared/.windicss/safelist.ts deleted file mode 100644 index eb8fedc5cb26..000000000000 --- a/packages/frontend-shared/.windicss/safelist.ts +++ /dev/null @@ -1,27 +0,0 @@ -/** - * WindiCSS will strip out any styles that aren't used. - * We do a lot of dynamic stuff, and we're not too concerned - * ith bundle size, so this is a pretty greedy list - */ -import { colors } from './colors' -import { map, reduce, kebabCase } from 'lodash' - -const textSafelist = ['xs', 'sm', 'lg', 'xl', '2xl', '3xl', '4xl', '5xl', '6xl'].map((v) => `text-${v}`).join(' ') -const colorSafelist = reduce(colors, (acc, variants, colorName) => { - const name = kebabCase(colorName) - - return `${acc} - ${map(variants, (_: string, k: string) => { - if (k === 'DEFAULT') return `` - - return ` - icon-light-${name}-${k} - icon-dark-${name}-${k} - bg-${name}-${k} - text-${name}-${k} - before:bg-${name}-${k} - before:text-${name}-${k}` - }).join(' ')}` -}, '') - -export const safelist = `${textSafelist} ${colorSafelist}` diff --git a/packages/frontend-shared/.windicss/shortcuts.ts b/packages/frontend-shared/.windicss/shortcuts.ts deleted file mode 100644 index 696c365b1147..000000000000 --- a/packages/frontend-shared/.windicss/shortcuts.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Our default hover/focus behavior for buttons and cards is an indigo - * border that hovers in and out - * Animations not working? Border looking a little off? Make sure that you - * have border-1 set on the non-hocus state. If you *don't* want a gray - * outline with that, do border-transparent for the non-hocus state. - */ - -const focusDefault = 'outline-none focus:border focus:border-indigo-300 focus:ring-2 focus:ring-indigo-100 focus:outline-transparent transition duration-150 disabled:hover:ring-0 disabled:hover:border-transparent' - -// Usually what you want -const hocusDefault = focusDefault.replace(/focus:/g, 'hocus:') - -// If you want to control a parent card when an inner button is in focus -const focusWithinDefault = focusDefault.replace(/focus:/g, 'focus-within:') - -export const shortcuts = { - 'default-ring': focusDefault.replace(/focus:/g, ''), - 'hocus-within-default': focusDefault.replace(/focus:/g, 'hocus-within:'), - 'hocus-default': hocusDefault, - 'focus-within-default': focusWithinDefault, - 'focus-default': focusDefault, - 'hocus-link-default': 'focus:outline-transparent hocus:underline', - 'hocus-error': hocusDefault.replace(/indigo/g, 'error'), - 'hocus-secondary': hocusDefault.replace(/indigo/g, 'jade'), -} diff --git a/packages/frontend-shared/package.json b/packages/frontend-shared/package.json index 3c838db9e67d..9c64b1ab3451 100644 --- a/packages/frontend-shared/package.json +++ b/packages/frontend-shared/package.json @@ -18,6 +18,7 @@ "dependencies": {}, "devDependencies": { "@antfu/utils": "^0.3.0", + "@cypress-design/css": "0.4.1", "@graphql-typed-document-node/core": "^3.1.0", "@headlessui/vue": "1.4.0", "@iconify/json": "1.1.368", @@ -37,7 +38,6 @@ "@vue/compiler-dom": "3.2.31", "@vue/compiler-sfc": "3.2.31", "@vueuse/core": "7.2.2", - "@windicss/plugin-interaction-variants": "1.0.0", "axe-core": "4.4.1", "combine-properties": "0.1.0", "cross-env": "6.0.3", @@ -74,7 +74,6 @@ "vue-router": "4", "vue-toastification": "2.0.0-rc.1", "vue-tsc": "^0.3.0", - "windicss": "3.1.4", "windicss-analysis": "^0.3.4", "wonka": "^4.0.15" }, diff --git a/packages/frontend-shared/script/generate-shiki-theme-ts.ts b/packages/frontend-shared/script/generate-shiki-theme-ts.ts index 99d7b4141a38..a9c3898aae06 100644 --- a/packages/frontend-shared/script/generate-shiki-theme-ts.ts +++ b/packages/frontend-shared/script/generate-shiki-theme-ts.ts @@ -1,5 +1,5 @@ /* eslint-disable no-console */ -import { colors } from '../.windicss/colors' +import { colors } from '@cypress-design/css' import * as fs from 'fs' const filePath = './src/public/shiki/themes/cypress.theme' diff --git a/packages/frontend-shared/vite.config.ts b/packages/frontend-shared/vite.config.ts index a79e55a3f101..b35c4ba0b797 100644 --- a/packages/frontend-shared/vite.config.ts +++ b/packages/frontend-shared/vite.config.ts @@ -2,9 +2,9 @@ import path from 'path' import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import WindiCSS from 'vite-plugin-windicss' import VueI18n from '@intlify/vite-plugin-vue-i18n' import VueSvgLoader from 'vite-svg-loader' +import { CyCSSVitePlugin } from '@cypress-design/css' import Components from 'unplugin-vue-components/vite' import Icons from 'unplugin-icons/vite' import IconsResolver from 'unplugin-icons/resolver' @@ -71,7 +71,19 @@ const makePlugins = (plugins) => { }), ...plugins?.componentsOptions, }), - WindiCSS(), + CyCSSVitePlugin({ + scan: { + // accepts globs and file paths relative to project root + include: [ + 'index.html', + '**/*.{vue,html,tsx}', + path.resolve(__dirname, '../frontend-shared/**/*.{vue,html,tsx,svg}'), + path.resolve(__dirname, '../app/**/*.{vue,html,tsx,svg}'), + path.resolve(__dirname, '../launchpad/**/*.{vue,html,tsx,svg}'), + ], + exclude: ['node_modules/**/*', '.git/**/*'], + }, + }), VueSvgLoader(), // package.json is modified and auto-updated when new cjs dependencies diff --git a/packages/frontend-shared/windi.config.ts b/packages/frontend-shared/windi.config.ts index b57322e1bb3e..ac065be05241 100644 --- a/packages/frontend-shared/windi.config.ts +++ b/packages/frontend-shared/windi.config.ts @@ -1,57 +1,14 @@ +/** + * This file is used for vscode plugin autocompletion of windi colors + */ + +import { colors } from '@cypress-design/css' import { defineConfig } from 'windicss/helpers' -import InteractionVariants from '@windicss/plugin-interaction-variants' -import { IconDuotoneColorsPlugin } from './.windicss/icon-color-plugins' -import { safelist } from './.windicss/safelist' -import { colors } from './.windicss/colors' -import { shortcuts } from './.windicss/shortcuts' -import path from 'path' -import type { FullConfig } from 'windicss/types/interfaces' -export const defaultConfig: FullConfig = { - // This adds !important to all utility classes. - // https://csswizardry.com/2016/05/the-importance-of-important/ - important: true, +export default defineConfig({ theme: { extend: { - borderRadius: { - DEFAULT: '4px', - md: '4px' }, - fontFamily: { - mono: '"Fira Code", monospace', - }, colors, - cursor: { - 'ew-resize': 'ew-resize', - }, - boxShadow: { - 'dropdown': '0 1px 3px 0 rgba(0, 0, 0, 0.2)', - }, }, }, - safelist, - variants: { - // What's hocus? - // Hocus is a portmanteau of hover + focus. This is useful because - // many of our styles are the same for both hover and focus. - backgroundColor: ['group-focus-within', 'group-focus-visible', 'group-active', 'group-visited', 'group-disabled', 'hocus', 'group-hocus', 'can-hover', 'no-hover'], - }, - plugins: [ - IconDuotoneColorsPlugin, - InteractionVariants, - require('windicss/plugin/filters'), - ], - shortcuts, - extract: { - // accepts globs and file paths relative to project root - include: [ - 'index.html', - '**/*.{vue,html,tsx}', - path.resolve(__dirname, '../frontend-shared/**/*.{vue,html,tsx,svg,ts}'), - path.resolve(__dirname, '../app/**/*.{vue,html,tsx,svg}'), - path.resolve(__dirname, '../launchpad/**/*.{vue,html,tsx,svg}'), - ], - exclude: ['node_modules/**/*', '.git/**/*'], - }, -} - -export default defineConfig(defaultConfig) +}) diff --git a/packages/launchpad/package.json b/packages/launchpad/package.json index c691bcafabee..0fc348cecde4 100644 --- a/packages/launchpad/package.json +++ b/packages/launchpad/package.json @@ -69,7 +69,6 @@ "vue-i18n": "9.2.0-beta.7", "vue-tsc": "^0.3.0", "vue3-file-selector": "^1.0.1", - "windicss": "3.1.4", "windicss-analysis": "^0.3.4", "wonka": "^4.0.15" }, diff --git a/packages/launchpad/windi.config.ts b/packages/launchpad/windi.config.ts index e68499f9350c..37cd764edfe4 100644 --- a/packages/launchpad/windi.config.ts +++ b/packages/launchpad/windi.config.ts @@ -1,4 +1,5 @@ -import { defaultConfig } from '@packages/frontend-shared/windi.config' -import { defineConfig } from 'windicss/helpers' +/** + * This file is used for vscode plugin autocompletion of windi colors + */ -export default defineConfig(defaultConfig) +export { default } from '@packages/frontend-shared/windi.config' diff --git a/yarn.lock b/yarn.lock index 769fa2b0b3d8..65209fa8e546 100644 --- a/yarn.lock +++ b/yarn.lock @@ -400,10 +400,10 @@ dependencies: "@types/throttle-debounce" "^2.1.0" -"@antfu/utils@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@antfu/utils/-/utils-0.5.0.tgz#b3169429997cb87850e543cb74660f9e2fed7efd" - integrity sha512-MrAQ/MrPSxbh1bBrmwJjORfJymw4IqSHFBXqvxaga3ZdDM+/zokYF8DjyJpSjY2QmpmgQrajDUBJOWrYeARfzA== +"@antfu/utils@^0.5.0", "@antfu/utils@^0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@antfu/utils/-/utils-0.5.1.tgz#7eb6764878adb715daff20019e5a15fd63d93342" + integrity sha512-8Afo0+xvYe1K8Wm4xHTymfTkpzy36aaqDvhXIayUwl+mecMG9Xzl3XjXa6swG6Bk8FBeQ646RyvmsYt6+2Be9g== "@ardatan/aggregate-error@0.0.6": version "0.0.6" @@ -2867,6 +2867,16 @@ resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-9.0.1.tgz#c27b391d8457d1e893f1eddeaf5e5412d12ffbb5" integrity sha512-6It2EVfGskxZCQhuykrfnALg7oVeiI6KclWSmGDqB0AiInVrTGB9Jp9i4/Ad21u9Jde/voVQz6eFX/eSg/UsPA== +"@cypress-design/css@0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@cypress-design/css/-/css-0.4.1.tgz#40c73462a1b8a04a2d045cef43d5e2480c3bbf2f" + integrity sha512-ycyrNcqm9Cy0+IrhVa7Ef9dSv+B/p69T0Sw6zhLDxHwq4S0YxtFgE4zf8R7O4SbR8vlU/YpV5GSQhaXCFLsQXg== + dependencies: + "@windicss/plugin-interaction-variants" "^1.0.0" + vite-plugin-windicss "^1.8.4" + windicss "^3.5.1" + windicss-webpack-plugin "^1.6.10" + "@cypress/browserify-preprocessor@3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@cypress/browserify-preprocessor/-/browserify-preprocessor-3.0.0.tgz#2d1fa6a96ed7130a1b172c540448a5955cbc1264" @@ -8940,16 +8950,16 @@ jiti "^1.10.1" windicss "^3.1.4" -"@windicss/config@1.8.2": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@windicss/config/-/config-1.8.2.tgz#52f8720a7987184a79d610a151f12a6325c3677e" - integrity sha512-dGXkzcH1Bnm9716/pE63YSewLQIZXGWerHEotUKf2EMlz/JqsI9Z3yBy/lXVL9HsEoTNpyvMPLk75oquH0vXGg== +"@windicss/config@1.8.4": + version "1.8.4" + resolved "https://registry.yarnpkg.com/@windicss/config/-/config-1.8.4.tgz#090c7f48cb86b6cba1bd97742a2f012852026d3c" + integrity sha512-i4fFGFfZoRess6WMkauykHC3PFd9xKYVx7lSuLfMK7sgo6x3+l4dY42GbsWMHyLqH1sTMfyt1LgfXSIKYJozSA== dependencies: - debug "^4.3.3" + debug "^4.3.4" jiti "^1.13.0" windicss "^3.5.1" -"@windicss/plugin-interaction-variants@1.0.0": +"@windicss/plugin-interaction-variants@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@windicss/plugin-interaction-variants/-/plugin-interaction-variants-1.0.0.tgz#11e412c6fd653899f6cced4e4f7b402eb5456981" integrity sha512-jk0kvJEwphPlzjgCASxi0yCrLIrMPBHKTjPB1vF2LZsmWVaIPhKQRfpJW6+G093ipDos1E2BkevDrh/R2Ln8gg== @@ -8967,17 +8977,17 @@ micromatch "^4.0.4" windicss "^3.1.4" -"@windicss/plugin-utils@1.8.2", "@windicss/plugin-utils@^1.1.1": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@windicss/plugin-utils/-/plugin-utils-1.8.2.tgz#f7c982b01d0ea96cf86585115743c770c6b2cd2e" - integrity sha512-UlinWxojyGxWV18AyQ1ISeGvtpbw4ITQpcRe0v4PyuJZHwnrrHmxp8o/pg10oEcDKnsTIbjGeZfW5DC+mkjYYQ== +"@windicss/plugin-utils@1.8.4", "@windicss/plugin-utils@^1.1.1", "@windicss/plugin-utils@^1.8.4": + version "1.8.4" + resolved "https://registry.yarnpkg.com/@windicss/plugin-utils/-/plugin-utils-1.8.4.tgz#fba74b6eb29276e24b9d09931bc22808fd7230d7" + integrity sha512-DqJVwAfzlgd8nYSNlmhXOey32pI8UwH7QiOWdFS/AR2O/q9oLDGHDn97Its/kZdfoyhi8ylwZNP2Pk0H7cihhQ== dependencies: - "@antfu/utils" "^0.5.0" - "@windicss/config" "1.8.2" - debug "^4.3.3" + "@antfu/utils" "^0.5.1" + "@windicss/config" "1.8.4" + debug "^4.3.4" fast-glob "^3.2.11" - magic-string "^0.25.7" - micromatch "^4.0.4" + magic-string "^0.26.1" + micromatch "^4.0.5" windicss "^3.5.1" "@xtuc/ieee754@^1.2.0": @@ -11791,7 +11801,7 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1, braces@~3.0.2: +braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -15057,10 +15067,10 @@ debounce@^1.2.0: resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== -debug@*, debug@4, debug@4.3.3, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@~4.3.1: - version "4.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== +debug@*, debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" @@ -15120,6 +15130,13 @@ debug@4.3.2: dependencies: ms "2.1.2" +debug@4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + dependencies: + ms "2.1.2" + debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -19184,6 +19201,11 @@ get-port@^4.2.0: resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw== +get-port@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-6.1.2.tgz#c1228abb67ba0e17fb346da33b15187833b9c08a" + integrity sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw== + get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" @@ -25007,6 +25029,13 @@ magic-string@0.25.7, magic-string@^0.25.0, magic-string@^0.25.5, magic-string@^0 dependencies: sourcemap-codec "^1.4.4" +magic-string@^0.26.1: + version "0.26.1" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.26.1.tgz#ba9b651354fa9512474199acecf9c6dbe93f97fd" + integrity sha512-ndThHmvgtieXe8J/VGPjG+Apu7v7ItcD5mhEIvOscWjPF/ccOiLxHaSuCAS2G+3x4GKsAbT8u7zdyamupui8Tg== + dependencies: + sourcemap-codec "^1.4.8" + make-dir@^1.0.0, make-dir@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" @@ -25439,7 +25468,7 @@ microevent.ts@~0.1.1: resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== -micromatch@4.0.4, micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4: +micromatch@4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== @@ -25485,6 +25514,14 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" +micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -28856,7 +28893,7 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pathe@0.2.0: +pathe@0.2.0, pathe@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/pathe/-/pathe-0.2.0.tgz#30fd7bbe0a0d91f0e60bae621f5d19e9e225c339" integrity sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw== @@ -28914,10 +28951,10 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pidtree@^0.3.0: version "0.3.1" @@ -37267,13 +37304,13 @@ vite-plugin-windicss@1.2.4: debug "^4.3.2" windicss "^3.1.4" -vite-plugin-windicss@^1.4.7: - version "1.8.2" - resolved "https://registry.yarnpkg.com/vite-plugin-windicss/-/vite-plugin-windicss-1.8.2.tgz#0d07964018d6d0f97bb2a02a452b6bc1e66ba968" - integrity sha512-tO9bCoqIW945ehwMr9D41YPods8b7HXtVtYVPx62dxadxlbcoD7PQ/8wSvLEiIkMMfuDG5WQ6LZaUdmfALC/vQ== +vite-plugin-windicss@^1.4.7, vite-plugin-windicss@^1.8.4: + version "1.8.4" + resolved "https://registry.yarnpkg.com/vite-plugin-windicss/-/vite-plugin-windicss-1.8.4.tgz#98430706691d54d6b9bf43ac0e3c74dd26b10664" + integrity sha512-LSZAO8BZn3x406GRbYX5t5ONXXJVdqiQtN1qrznLA/Dy5/NzZVhfcrL6N1qEYYO7HsCDT4pLAjTzObvDnM9Y8A== dependencies: - "@windicss/plugin-utils" "1.8.2" - debug "^4.3.3" + "@windicss/plugin-utils" "1.8.4" + debug "^4.3.4" kolorist "^1.5.1" windicss "^3.5.1" @@ -38310,10 +38347,19 @@ windicss-analysis@^0.3.4: fs-extra "^10.0.0" sirv "^1.0.12" -windicss@3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/windicss/-/windicss-3.1.4.tgz#557eaf8e3c08064a309ccb5d887c82c4bce25069" - integrity sha512-3RBcANxdOy/n4dLVT8+0X409sGI+piO06ARbQ8RncxGuYgdw5Ip3hrhGIYajH67lV+tHc7xNVGxj73amOC9N0g== +windicss-webpack-plugin@^1.6.10: + version "1.7.2" + resolved "https://registry.yarnpkg.com/windicss-webpack-plugin/-/windicss-webpack-plugin-1.7.2.tgz#e00382ba8b487813d340ba799effa26e1be3356b" + integrity sha512-7KopGPg63RXyJfsq/2OAHYoAFyIHSeexAk+MYMlW4CsBlEb+sw0Kt2v0gLgsPc1zs90oky1crAElKk+DDk8/5A== + dependencies: + "@windicss/plugin-utils" "^1.8.4" + debug "^4.3.4" + get-port "^6.1.2" + loader-utils "^2.0.0" + lodash "^4.17.21" + pathe "^0.2.0" + webpack-virtual-modules "^0.4.3" + windicss "^3.5.1" windicss@^3.1.4, windicss@^3.5.1: version "3.5.1" From 6458f6cd5c8e13d0181dc5eaf99bc1a61d63635e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 22 Jun 2022 15:48:33 +0000 Subject: [PATCH 06/18] chore: Update Chrome (stable) to 103.0.5060.53 (#22441) Co-authored-by: cypress-bot[bot] <2f0651858c6e38e0+cypress-bot[bot]@users.noreply.github.com> Co-authored-by: Bill Glesias --- browser-versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/browser-versions.json b/browser-versions.json index f65fc03af208..1ba5d0e62917 100644 --- a/browser-versions.json +++ b/browser-versions.json @@ -1,4 +1,4 @@ { "chrome:beta": "103.0.5060.53", - "chrome:stable": "102.0.5005.115" + "chrome:stable": "103.0.5060.53" } From defde91f2a2354a1cae7dea7741f6e5c20a72e4b Mon Sep 17 00:00:00 2001 From: Tyler Biethman Date: Wed, 22 Jun 2022 11:44:58 -0500 Subject: [PATCH 07/18] fix: process_profiler follow up work for v10 (#22363) * fix: process_profiler follow up work for v10 * Converting index file to ts --- .../data-context/src/data/ProjectConfigIpc.ts | 4 ++ .../src/data/ProjectConfigManager.ts | 4 ++ .../src/data/ProjectLifecycleManager.ts | 4 ++ .../test/unit/data/ProjectConfigIpc.spec.ts | 32 ++++++++++++++ .../unit/data/ProjectConfigManager.spec.ts | 42 +++++++++++++++++++ .../unit/data/ProjectLifecycleManager.spec.ts | 18 ++++++++ packages/server/lib/browsers/utils.ts | 3 +- packages/server/lib/plugins/index.js | 41 ------------------ packages/server/lib/plugins/index.ts | 28 +++++++++++++ packages/server/lib/util/process_profiler.ts | 8 ++-- 10 files changed, 137 insertions(+), 47 deletions(-) create mode 100644 packages/data-context/test/unit/data/ProjectConfigIpc.spec.ts create mode 100644 packages/data-context/test/unit/data/ProjectConfigManager.spec.ts delete mode 100644 packages/server/lib/plugins/index.js create mode 100644 packages/server/lib/plugins/index.ts diff --git a/packages/data-context/src/data/ProjectConfigIpc.ts b/packages/data-context/src/data/ProjectConfigIpc.ts index dd53b3070596..15023dac9547 100644 --- a/packages/data-context/src/data/ProjectConfigIpc.ts +++ b/packages/data-context/src/data/ProjectConfigIpc.ts @@ -70,6 +70,10 @@ export class ProjectConfigIpc extends EventEmitter { return autoBindDebug(this) } + get childProcessPid () { + return this._childProcess?.pid + } + // TODO: options => Cypress.TestingTypeOptions send(event: 'execute:plugins', evt: string, ids: {eventId: string, invocationId: string}, args: any[]): boolean send(event: 'setupTestingType', testingType: TestingType, options: Cypress.PluginConfigOptions): boolean diff --git a/packages/data-context/src/data/ProjectConfigManager.ts b/packages/data-context/src/data/ProjectConfigManager.ts index 21a9e644f19a..fe9d1514354e 100644 --- a/packages/data-context/src/data/ProjectConfigManager.ts +++ b/packages/data-context/src/data/ProjectConfigManager.ts @@ -81,6 +81,10 @@ export class ProjectConfigManager { return this._configFilePath } + get eventProcessPid () { + return this._eventsIpc?.childProcessPid + } + set configFilePath (configFilePath) { this._configFilePath = configFilePath } diff --git a/packages/data-context/src/data/ProjectLifecycleManager.ts b/packages/data-context/src/data/ProjectLifecycleManager.ts index f0eb1b7190c9..3d2fc501cd00 100644 --- a/packages/data-context/src/data/ProjectLifecycleManager.ts +++ b/packages/data-context/src/data/ProjectLifecycleManager.ts @@ -181,6 +181,10 @@ export class ProjectLifecycleManager { return this.metaState.isUsingTypeScript ? 'ts' : 'js' } + get eventProcessPid () { + return this._configManager?.eventProcessPid + } + clearCurrentProject () { this.resetInternalState() this._initializedProject = undefined diff --git a/packages/data-context/test/unit/data/ProjectConfigIpc.spec.ts b/packages/data-context/test/unit/data/ProjectConfigIpc.spec.ts new file mode 100644 index 000000000000..1a8bd720e041 --- /dev/null +++ b/packages/data-context/test/unit/data/ProjectConfigIpc.spec.ts @@ -0,0 +1,32 @@ +import { expect } from 'chai' +import { scaffoldMigrationProject as scaffoldProject } from '../helper' +import { ProjectConfigIpc } from '../../../src/data/ProjectConfigIpc' + +describe('ProjectConfigIpc', () => { + let projectConfigIpc + + beforeEach(async () => { + const projectPath = await scaffoldProject('e2e') + + projectConfigIpc = new ProjectConfigIpc( + undefined, + projectPath, + 'cypress.config.js', + false, + (error) => {}, + () => {}, + ) + }) + + afterEach(() => { + projectConfigIpc.cleanupIpc() + }) + + context('#eventProcessPid', () => { + it('returns id for child process', () => { + const expectedId = projectConfigIpc._childProcess.pid + + expect(projectConfigIpc.childProcessPid).to.eq(expectedId) + }) + }) +}) diff --git a/packages/data-context/test/unit/data/ProjectConfigManager.spec.ts b/packages/data-context/test/unit/data/ProjectConfigManager.spec.ts new file mode 100644 index 000000000000..1cdbb3e1021d --- /dev/null +++ b/packages/data-context/test/unit/data/ProjectConfigManager.spec.ts @@ -0,0 +1,42 @@ +import { expect } from 'chai' +import { createTestDataContext } from '../helper' +import { ProjectConfigManager } from '../../../src/data/ProjectConfigManager' +import { EventRegistrar } from '../../../src/data/EventRegistrar' + +let configManager: ProjectConfigManager + +describe('ProjectConfigManager', () => { + beforeEach(() => { + const ctx = createTestDataContext('open') + + configManager = new ProjectConfigManager({ + ctx, + configFile: false, + projectRoot: 'test/root', + handlers: [], + hasCypressEnvFile: false, + eventRegistrar: new EventRegistrar(), + onError: (error) => {}, + onInitialConfigLoaded: () => {}, + onFinalConfigLoaded: () => Promise.resolve(), + refreshLifecycle: () => Promise.resolve(), + }) + }) + + context('#eventProcessPid', () => { + it('returns process id from events ipc', () => { + // @ts-expect-error + configManager._eventsIpc = { + childProcessPid: 45699, + } + + expect(configManager.eventProcessPid).to.eq(45699) + }) + + it('does not throw if config manager is not initialized', () => { + // @ts-expect-error + configManager._eventsIpc = undefined + expect(configManager.eventProcessPid).to.eq(undefined) + }) + }) +}) diff --git a/packages/data-context/test/unit/data/ProjectLifecycleManager.spec.ts b/packages/data-context/test/unit/data/ProjectLifecycleManager.spec.ts index 7b52ac0dee6b..8bd3cfeaaee1 100644 --- a/packages/data-context/test/unit/data/ProjectLifecycleManager.spec.ts +++ b/packages/data-context/test/unit/data/ProjectLifecycleManager.spec.ts @@ -88,4 +88,22 @@ describe('ProjectLifecycleManager', () => { expect(ctx.actions.project.launchProject).to.not.be.called }) }) + + context('#eventProcessPid', () => { + it('returns process id from config manager', () => { + // @ts-expect-error + ctx.lifecycleManager._configManager = { + eventProcessPid: 12399, + destroy: () => {}, + } + + expect(ctx.lifecycleManager.eventProcessPid).to.eq(12399) + }) + + it('does not throw if config manager is not initialized', () => { + // @ts-expect-error + ctx.lifecycleManager._configManager = undefined + expect(ctx.lifecycleManager.eventProcessPid).to.eq(undefined) + }) + }) }) diff --git a/packages/server/lib/browsers/utils.ts b/packages/server/lib/browsers/utils.ts index d84850cd9edd..41369fc14c04 100644 --- a/packages/server/lib/browsers/utils.ts +++ b/packages/server/lib/browsers/utils.ts @@ -3,8 +3,7 @@ import Bluebird from 'bluebird' import _ from 'lodash' import type { FoundBrowser } from '@packages/types' import * as errors from '../errors' -// @ts-ignore -import plugins from '../plugins' +import * as plugins from '../plugins' import { getError } from '@packages/errors' const path = require('path') diff --git a/packages/server/lib/plugins/index.js b/packages/server/lib/plugins/index.js deleted file mode 100644 index f0fc85b06ad2..000000000000 --- a/packages/server/lib/plugins/index.js +++ /dev/null @@ -1,41 +0,0 @@ -const { getCtx, registerServerPluginHandler, getServerPluginHandlers: getPluginHandlers } = require('@packages/data-context') - -const registerEvent = (event, callback) => { - getCtx().lifecycleManager.registerEvent(event, callback) -} - -const getPluginPid = () => { - return getCtx().lifecycleManager.eventProcessPid -} - -const registerHandler = (handler) => { - registerServerPluginHandler(handler) -} - -const getServerPluginHandlers = () => { - return getPluginHandlers() -} - -const has = (event) => { - return getCtx().lifecycleManager.hasNodeEvent(event) -} - -const execute = (event, ...args) => { - return getCtx().lifecycleManager.executeNodeEvent(event, args) -} - -const _reset = () => { - return getCtx().lifecycleManager.reinitializeCypress() -} - -module.exports = { - getPluginPid, - execute, - has, - registerEvent, - registerHandler, - getServerPluginHandlers, - - // for testing purposes - _reset, -} diff --git a/packages/server/lib/plugins/index.ts b/packages/server/lib/plugins/index.ts new file mode 100644 index 000000000000..007ea9d79357 --- /dev/null +++ b/packages/server/lib/plugins/index.ts @@ -0,0 +1,28 @@ +import { + getCtx, registerServerPluginHandler, +} from '@packages/data-context' + +export const registerEvent = (event, callback) => { + getCtx().lifecycleManager.registerEvent(event, callback) +} + +export const getPluginPid = () => { + return getCtx().lifecycleManager.eventProcessPid +} + +export const registerHandler = (handler) => { + registerServerPluginHandler(handler) +} + +export const has = (event) => { + return getCtx().lifecycleManager.hasNodeEvent(event) +} + +export const execute = (event, ...args) => { + return getCtx().lifecycleManager.executeNodeEvent(event, args) +} + +// for testing purposes +export const _reset = () => { + return getCtx().lifecycleManager.reinitializeCypress() +} diff --git a/packages/server/lib/util/process_profiler.ts b/packages/server/lib/util/process_profiler.ts index 505825f21b58..01563aeb28e5 100644 --- a/packages/server/lib/util/process_profiler.ts +++ b/packages/server/lib/util/process_profiler.ts @@ -64,16 +64,16 @@ export const _groupCyProcesses = ({ list }: si.Systeminformation.ProcessesData) // is this the renderer for the launchpad? const isDesktopGuiProcess = (proc: Process): boolean => { - return proc.params.includes('--type=renderer') + return proc.params?.includes('--type=renderer') && !isBrowserProcess(proc) } - // these processes may be shared between the AUT and launchpad + // these processes may be shared between the AUT and launchpad. // rather than treat them as part of the `browser` in `run` mode and have // their usage in `open` mode be ambiguous, just put them in their own group const isElectronSharedProcess = (proc: Process): boolean => { const isType = (type) => { - return proc.params.includes(`--type=${type}`) + return proc.params?.includes(`--type=${type}`) } return isType('broker') @@ -208,7 +208,7 @@ export const _aggregateGroups = (processes: Process[]) => { export const _printGroupedProcesses = (groupTotals) => { const consoleBuffer = concatStream((buf) => { // get rid of trailing newline - debugVerbose(String(buf).trim()) + debug(String(buf).trim()) }) // eslint-disable-next-line no-console From 0dc1f268c1ee47959502ed6699fefa1759a9d8ab Mon Sep 17 00:00:00 2001 From: Adam Stone Date: Wed, 22 Jun 2022 17:11:06 -0400 Subject: [PATCH 08/18] chore: Add test to verify settings panels are collapsed by default (#22382) --- packages/app/src/settings/SettingsCard.vue | 5 ++++- .../app/src/settings/SettingsContainer.cy.tsx | 17 +++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/app/src/settings/SettingsCard.vue b/packages/app/src/settings/SettingsCard.vue index 9af59e459c5d..d875b52d769d 100644 --- a/packages/app/src/settings/SettingsCard.vue +++ b/packages/app/src/settings/SettingsCard.vue @@ -32,7 +32,10 @@ -

+
diff --git a/packages/app/src/settings/SettingsContainer.cy.tsx b/packages/app/src/settings/SettingsContainer.cy.tsx index 6638c6e27922..76a766cef461 100644 --- a/packages/app/src/settings/SettingsContainer.cy.tsx +++ b/packages/app/src/settings/SettingsContainer.cy.tsx @@ -2,17 +2,19 @@ import { SettingsContainerFragmentDoc } from '../generated/graphql-test' import { defaultMessages } from '@cy/i18n' import SettingsContainer from './SettingsContainer.vue' +const mountSettingsContainer = () => cy.mountFragment(SettingsContainerFragmentDoc, { render: (gql) => }) + +beforeEach(() => mountSettingsContainer()) + describe('', { viewportHeight: 800, viewportWidth: 900 }, () => { - const mountSettingsContainer = () => cy.mountFragment(SettingsContainerFragmentDoc, { render: (gql) => }) + it('renders sections collapsed by default', () => { + cy.findByTestId('settings').should('be.visible') + cy.findByTestId('setting-expanded-container').should('not.exist') - it('renders', () => { - mountSettingsContainer() cy.percySnapshot() }) it('expands and collapses project settings', () => { - mountSettingsContainer() - cy.contains('Project Settings').click() cy.findByText(defaultMessages.settingsPage.experiments.title).scrollIntoView().should('be.visible') @@ -25,8 +27,6 @@ describe('', { viewportHeight: 800, viewportWidth: 900 }, ( }) it('expands and collapses device settings', () => { - mountSettingsContainer() - cy.contains('Device Settings').click() cy.findByText(defaultMessages.settingsPage.editor.title).should('be.visible') @@ -40,8 +40,6 @@ describe('', { viewportHeight: 800, viewportWidth: 900 }, ( }) it('expands and collapses cloud settings', () => { - mountSettingsContainer() - cy.contains('Dashboard Settings').click() cy.findByText(defaultMessages.settingsPage.projectId.title).scrollIntoView().should('be.visible') @@ -52,7 +50,6 @@ describe('', { viewportHeight: 800, viewportWidth: 900 }, ( }) it('renders footer with CTA button', () => { - mountSettingsContainer() cy.contains('p', defaultMessages.settingsPage.footer.text.replace('{testingType}', 'E2E')) cy.contains('a', defaultMessages.settingsPage.footer.button) .should('have.attr', 'href', defaultMessages.settingsPage.footer.buttonLink) From b678b1487731c5379fc8c75474beaf4712b79f95 Mon Sep 17 00:00:00 2001 From: Mike Plummer Date: Wed, 22 Jun 2022 23:42:46 +0000 Subject: [PATCH 09/18] feat: Add button to clear value from search fields (#22202) Co-authored-by: Zachary Williams --- .../app/src/specs/InlineSpecListHeader.cy.tsx | 19 +++++++- .../app/src/specs/InlineSpecListHeader.vue | 21 ++++++-- packages/app/src/specs/SpecsListHeader.cy.tsx | 48 +++++++++++++------ packages/app/src/specs/SpecsListHeader.vue | 16 ++++++- .../frontend-shared/src/components/Input.vue | 21 ++++---- .../frontend-shared/src/locales/en-US.json | 1 + 6 files changed, 93 insertions(+), 33 deletions(-) diff --git a/packages/app/src/specs/InlineSpecListHeader.cy.tsx b/packages/app/src/specs/InlineSpecListHeader.cy.tsx index 8ee30fd332de..3d31fa26f187 100644 --- a/packages/app/src/specs/InlineSpecListHeader.cy.tsx +++ b/packages/app/src/specs/InlineSpecListHeader.cy.tsx @@ -10,7 +10,6 @@ describe('InlineSpecListHeader', () => { cy.wrap(search).as('search') const methods = { - search: search.value, 'onUpdate:search': (val: string) => { search.value = val }, @@ -19,7 +18,7 @@ describe('InlineSpecListHeader', () => { cy.mount(() => (
- +
)) } @@ -28,6 +27,7 @@ describe('InlineSpecListHeader', () => { const searchString = 'my/component.cy.tsx' cy.findByLabelText(defaultMessages.specPage.searchPlaceholder) + // `force` necessary due to the field label being overlaid on top of the input .type(searchString, { delay: 0, force: true }) .get('@search').its('value').should('eq', searchString) }) @@ -40,6 +40,21 @@ describe('InlineSpecListHeader', () => { .should('have.been.called') }) + it('clears search field when clear button is clicked', () => { + mountWithResultCount(0) + + cy.findByTestId('clear-search-button') + .should('not.exist') + + cy.findByLabelText(defaultMessages.specPage.searchPlaceholder) + // `force` necessary due to the field label being overlaid on top of the input + .type('abcd', { delay: 0, force: true }) + .get('@search').its('value').should('eq', 'abcd') + + cy.findByTestId('clear-search-button').click() + cy.get('@search').its('value').should('eq', '') + }) + it('exposes the result count correctly to assistive tech', () => { mountWithResultCount(0) cy.contains('No Matches') diff --git a/packages/app/src/specs/InlineSpecListHeader.vue b/packages/app/src/specs/InlineSpecListHeader.vue index ac9a9617a760..b388a71e9567 100644 --- a/packages/app/src/specs/InlineSpecListHeader.vue +++ b/packages/app/src/specs/InlineSpecListHeader.vue @@ -3,7 +3,7 @@ class="border-b-1 border-gray-900 h-64px mx-16px grid gap-8px grid-cols-[minmax(0,1fr),24px] pointer-cursor items-center" >
{{ t('specPage.searchPlaceholder') }} +
+