diff --git a/.eslintrc-ts.js b/.eslintrc-ts.js index a8798c8..1f41f9c 100644 --- a/.eslintrc-ts.js +++ b/.eslintrc-ts.js @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC module.exports = { extends: [ diff --git a/.eslintrc.js b/.eslintrc.js index 689ec41..fde84cc 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC module.exports = { env: { diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index a7fbc3f..840be35 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -8,8 +8,8 @@ on: # Run the pipeline daily so that we get continuous dogfooding. schedule: - # Run at 6pm UTC/10am Pacific - - cron: 0 18 * * * + # Run at 8am UTC/midnight Pacific + - cron: 0 8 * * * # Allows you to run this workflow manually from the Actions tab workflow_dispatch: {} @@ -110,6 +110,7 @@ jobs: if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || needs.check.outputs.affects_cypress == 'true' strategy: fail-fast: false + max-parallel: 16 matrix: node: - 16 @@ -129,6 +130,14 @@ jobs: - "12.17" - "13.0" - "13.1" + - "13.2" + # 13.3.2 introduced a regression that made that version (and 13.3.3) too flaky to test. + # See: + # - https://github.com/cypress-io/cypress/issues/28141 + # - https://github.com/cypress-io/cypress/issues/28148 + #- "13.3" + - "13.4" + - "13.5" steps: - uses: actions/checkout@v4 @@ -167,6 +176,9 @@ jobs: mv package-new.json package.json yarn install --no-immutable + - name: Build test dependencies + run: yarn build:plugins-common && yarn build:test-common && yarn build:cypress-tests + - name: Set Cypress version env: CYPRESS_INSTALL_BINARY: "0" @@ -177,9 +189,6 @@ jobs: - name: Install Cypress binary run: yarn workspace cypress-integration exec cypress install - - name: Build test dependencies - run: yarn build:plugins-common && yarn build:test-common && yarn build:cypress-tests - - name: Test env: # Enable debug logs within the Jest tests that run Cypress. WARNING: these are very @@ -210,13 +219,14 @@ jobs: name: "Cypress ${{ matrix.cypress }} Windows Node ${{ matrix.node }} Integration Tests" runs-on: windows-2019 # Cypress on Windows is slowwww... - timeout-minutes: 90 + timeout-minutes: 180 needs: # Don't incur the cost of the test matrix if the basic build fails. - check if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || needs.check.outputs.affects_cypress == 'true' strategy: fail-fast: false + max-parallel: 16 matrix: node: - 16 @@ -236,6 +246,10 @@ jobs: - "12.17" - "13.0" - "13.1" + - "13.2" + #- "13.3" + - "13.4" + - "13.5" steps: - uses: actions/checkout@v4 @@ -278,6 +292,9 @@ jobs: mv package-new.json package.json yarn install --no-immutable + - name: Build test dependencies + run: yarn build:plugins-common && yarn build:test-common && yarn build:cypress-tests + - name: Set Cypress version env: CYPRESS_INSTALL_BINARY: "0" @@ -288,9 +305,6 @@ jobs: - name: Install Cypress binary run: yarn workspace cypress-integration exec cypress install - - name: Build test dependencies - run: yarn build:plugins-common && yarn build:test-common && yarn build:cypress-tests - - name: Test env: # Enable debug logs within the Jest tests that run Cypress. WARNING: these are very @@ -324,12 +338,14 @@ jobs: if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || needs.check.outputs.affects_jest == 'true' strategy: fail-fast: false + max-parallel: 12 matrix: node: - 16 - 18 - 20 jest: + - "29.7" - "29.6" - "29.5" - "29.4" @@ -440,12 +456,14 @@ jobs: if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || needs.check.outputs.affects_jest == 'true' strategy: fail-fast: false + max-parallel: 12 matrix: node: - 16 - 18 - 20 jest: + - "29.7" - "29.6" - "29.5" - "29.4" diff --git a/.github/workflows/cypress-realworld-app.yaml b/.github/workflows/cypress-realworld-app.yaml index eab82bc..63c169c 100644 --- a/.github/workflows/cypress-realworld-app.yaml +++ b/.github/workflows/cypress-realworld-app.yaml @@ -16,7 +16,7 @@ jobs: timeout-minutes: 15 runs-on: ubuntu-latest container: - image: cypress/browsers:node16.16.0-chrome105-ff104-edge + image: cypress/browsers:node-18.16.0-chrome-114.0.5735.133-1-ff-114.0.2-edge-114.0.1823.51-1 options: --user 1001 steps: - name: Check out latest cypress-io/cypress-realworld-app @@ -62,7 +62,7 @@ jobs: # tarballs. Otherwise, Yarn may install the previously cached version from an earlier build # with the same package version number. run: | - curl -Lo jq https://github.com/jqlang/jq/releases/download/jq-1.6/jq-linux64 + wget -O jq https://github.com/jqlang/jq/releases/download/jq-1.6/jq-linux64 chmod +x jq yarn cache clean @unflakable/js-api diff --git a/LICENSE b/LICENSE index 53bf01b..fc24ed8 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2022-2023 Developer Innovations, LLC +Copyright (c) 2022-2024 Developer Innovations, LLC Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/cypress-plugin/cypress-on-fix.d.ts b/packages/cypress-plugin/cypress-on-fix.d.ts new file mode 100644 index 0000000..7d24e1b --- /dev/null +++ b/packages/cypress-plugin/cypress-on-fix.d.ts @@ -0,0 +1,8 @@ +// Copyright (c) 2023-2024 Developer Innovations, LLC + +declare module "cypress-on-fix" { + import * as Cypress from "cypress"; + export default function onProxy( + on: Cypress.PluginEvents + ): Cypress.PluginEvents; +} diff --git a/packages/cypress-plugin/jest.config.js b/packages/cypress-plugin/jest.config.js index d2d9b3c..5ed0700 100644 --- a/packages/cypress-plugin/jest.config.js +++ b/packages/cypress-plugin/jest.config.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC /** @type {import('ts-jest').JestConfigWithTsJest} */ module.exports = { diff --git a/packages/cypress-plugin/mocha.d.ts b/packages/cypress-plugin/mocha.d.ts index 428fca1..937533b 100644 --- a/packages/cypress-plugin/mocha.d.ts +++ b/packages/cypress-plugin/mocha.d.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC type GlobalError = Error; diff --git a/packages/cypress-plugin/package.json b/packages/cypress-plugin/package.json index 604db86..0cd0dc7 100644 --- a/packages/cypress-plugin/package.json +++ b/packages/cypress-plugin/package.json @@ -52,6 +52,7 @@ "cli-table3": "0.5.1", "cosmiconfig": "^7.0.1", "cypress-multi-reporters": "^1.6.3", + "cypress-on-fix": "^1.0.2", "dayjs": "^1.10.4", "debug": "^4.3.3", "deep-equal": "^2.0.5", diff --git a/packages/cypress-plugin/rollup.config.mjs b/packages/cypress-plugin/rollup.config.mjs index f7b899a..3b6678e 100644 --- a/packages/cypress-plugin/rollup.config.mjs +++ b/packages/cypress-plugin/rollup.config.mjs @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import pluginCommonJs from "@rollup/plugin-commonjs"; import pluginDts from "rollup-plugin-dts"; diff --git a/packages/cypress-plugin/src/.eslintrc.js b/packages/cypress-plugin/src/.eslintrc.js index 62e8179..4070ee2 100644 --- a/packages/cypress-plugin/src/.eslintrc.js +++ b/packages/cypress-plugin/src/.eslintrc.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC module.exports = { extends: ["../../../.eslintrc-ts.js"], diff --git a/packages/cypress-plugin/src/config-env-vars.ts b/packages/cypress-plugin/src/config-env-vars.ts index d9623b1..721480f 100644 --- a/packages/cypress-plugin/src/config-env-vars.ts +++ b/packages/cypress-plugin/src/config-env-vars.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { EnvVar } from "@unflakable/plugins-common"; diff --git a/packages/cypress-plugin/src/config-wrapper-sync.ts b/packages/cypress-plugin/src/config-wrapper-sync.ts index 3b4e983..96b672f 100644 --- a/packages/cypress-plugin/src/config-wrapper-sync.ts +++ b/packages/cypress-plugin/src/config-wrapper-sync.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { wrapCypressConfig } from "./index"; import _debug from "debug"; diff --git a/packages/cypress-plugin/src/config-wrapper.ts b/packages/cypress-plugin/src/config-wrapper.ts index 507c638..8b01fca 100644 --- a/packages/cypress-plugin/src/config-wrapper.ts +++ b/packages/cypress-plugin/src/config-wrapper.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { wrapCypressConfig } from "./index"; import _debug from "debug"; diff --git a/packages/cypress-plugin/src/cypress-env-vars.ts b/packages/cypress-plugin/src/cypress-env-vars.ts index 14c03b0..52f34fd 100644 --- a/packages/cypress-plugin/src/cypress-env-vars.ts +++ b/packages/cypress-plugin/src/cypress-env-vars.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC // NB: This file is separate from config-env-vars.ts so that it can be included by skip-tests.ts // without adding any Node.JS dependencies (since that file needs to run in the browser). diff --git a/packages/cypress-plugin/src/index.ts b/packages/cypress-plugin/src/index.ts index 90b54e5..9a7cbdc 100644 --- a/packages/cypress-plugin/src/index.ts +++ b/packages/cypress-plugin/src/index.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import _debug from "debug"; import { @@ -19,6 +19,7 @@ import { ENV_VAR_AUTO_SUPPORT, ENV_VAR_UNFLAKABLE_RESOLVED_CONFIG_JSON, } from "./config-env-vars"; +import cypressOnFix from "cypress-on-fix"; export { PluginOptions }; @@ -100,9 +101,14 @@ const wrapSetupNodeEvents = | undefined ) => async ( - on: Cypress.PluginEvents, + baseOn: Cypress.PluginEvents, config: Cypress.PluginConfigOptions ): Promise => { + // Due to https://github.com/cypress-io/cypress/issues/22428, only the last event handler + // registered for each event type will be called. This means we'll clobber any event handlers + // the user registers. To avoid this, we use cypress-on-fix. + const on = cypressOnFix(baseOn); + const userModifiedConfig = userSetupNodeEvents !== undefined ? await userSetupNodeEvents(on, config) diff --git a/packages/cypress-plugin/src/load-user-config.ts b/packages/cypress-plugin/src/load-user-config.ts index 48a26d1..d56ecc5 100644 --- a/packages/cypress-plugin/src/load-user-config.ts +++ b/packages/cypress-plugin/src/load-user-config.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import _debug from "debug"; import { require } from "./utils"; diff --git a/packages/cypress-plugin/src/main.ts b/packages/cypress-plugin/src/main.ts index ccf5ad2..314509e 100755 --- a/packages/cypress-plugin/src/main.ts +++ b/packages/cypress-plugin/src/main.ts @@ -1,6 +1,6 @@ //#!/usr/bin/env node -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import * as cypress from "cypress"; import _debug from "debug"; diff --git a/packages/cypress-plugin/src/plugin.ts b/packages/cypress-plugin/src/plugin.ts index 158e548..9cf075f 100644 --- a/packages/cypress-plugin/src/plugin.ts +++ b/packages/cypress-plugin/src/plugin.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { createTestSuiteRun, diff --git a/packages/cypress-plugin/src/reporter-common.ts b/packages/cypress-plugin/src/reporter-common.ts index 11d6a62..3b8bbbc 100644 --- a/packages/cypress-plugin/src/reporter-common.ts +++ b/packages/cypress-plugin/src/reporter-common.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC // Reporter stats from running a single spec. export type ReporterStats = Mocha.Stats & { diff --git a/packages/cypress-plugin/src/reporter-config.test.ts b/packages/cypress-plugin/src/reporter-config.test.ts index 55d40b6..9fe454d 100644 --- a/packages/cypress-plugin/src/reporter-config.test.ts +++ b/packages/cypress-plugin/src/reporter-config.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { configureMochaReporter } from "./reporter-config"; import { QuarantineMode } from "@unflakable/plugins-common"; diff --git a/packages/cypress-plugin/src/reporter-config.ts b/packages/cypress-plugin/src/reporter-config.ts index d8e4951..dfbfbe8 100644 --- a/packages/cypress-plugin/src/reporter-config.ts +++ b/packages/cypress-plugin/src/reporter-config.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { ReporterConfig } from "./reporter"; import { printWarning, require } from "./utils"; diff --git a/packages/cypress-plugin/src/reporter.ts b/packages/cypress-plugin/src/reporter.ts index 3475e69..c1fdddd 100644 --- a/packages/cypress-plugin/src/reporter.ts +++ b/packages/cypress-plugin/src/reporter.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import _debug from "debug"; import { diff --git a/packages/cypress-plugin/src/skip-tests.ts b/packages/cypress-plugin/src/skip-tests.ts index 18531b2..deabbc8 100644 --- a/packages/cypress-plugin/src/skip-tests.ts +++ b/packages/cypress-plugin/src/skip-tests.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC // This file runs inside the browser as part of the test code. It gets loaded by a Cypress support // file injected by the plugin when quarantine mode is set to `skip_tests`. diff --git a/packages/cypress-plugin/src/tsconfig.json b/packages/cypress-plugin/src/tsconfig.json index 44badea..80d8585 100644 --- a/packages/cypress-plugin/src/tsconfig.json +++ b/packages/cypress-plugin/src/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../tsconfig.json", - "include": ["../mocha.d.ts", ".", ".eslintrc.js"] + "include": ["../cypress-on-fix.d.ts", "../mocha.d.ts", ".", ".eslintrc.js"] } diff --git a/packages/cypress-plugin/src/utils.ts b/packages/cypress-plugin/src/utils.ts index 95d5fa7..f2f0bad 100644 --- a/packages/cypress-plugin/src/utils.ts +++ b/packages/cypress-plugin/src/utils.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import chalk from "chalk"; import { readFileSync } from "fs"; diff --git a/packages/cypress-plugin/src/vendored/cli-table3.d.ts b/packages/cypress-plugin/src/vendored/cli-table3.d.ts index 14c7749..f7b1b70 100644 --- a/packages/cypress-plugin/src/vendored/cli-table3.d.ts +++ b/packages/cypress-plugin/src/vendored/cli-table3.d.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC // Cypress imports this even though it's not part of the cli-table3 exports, so we add some types // here. diff --git a/packages/cypress-plugin/test/.eslintrc.cjs b/packages/cypress-plugin/test/.eslintrc.cjs index 7b41633..ea0aeee 100644 --- a/packages/cypress-plugin/test/.eslintrc.cjs +++ b/packages/cypress-plugin/test/.eslintrc.cjs @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC module.exports = { env: { diff --git a/packages/cypress-plugin/test/integration-input-esm/.eslintrc.cjs b/packages/cypress-plugin/test/integration-input-esm/.eslintrc.cjs index b6febf5..0015a28 100644 --- a/packages/cypress-plugin/test/integration-input-esm/.eslintrc.cjs +++ b/packages/cypress-plugin/test/integration-input-esm/.eslintrc.cjs @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC module.exports = { extends: ["../../../../.eslintrc-ts.js"], diff --git a/packages/cypress-plugin/test/integration-input-esm/config-js/devtools.js b/packages/cypress-plugin/test/integration-input-esm/config-js/devtools.js index afbffdc..b21da85 100644 --- a/packages/cypress-plugin/test/integration-input-esm/config-js/devtools.js +++ b/packages/cypress-plugin/test/integration-input-esm/config-js/devtools.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC export const openDevToolsOnLaunch = /** diff --git a/packages/cypress-plugin/test/integration-input-esm/config-js/headless.js b/packages/cypress-plugin/test/integration-input-esm/config-js/headless.js new file mode 100644 index 0000000..82602cc --- /dev/null +++ b/packages/cypress-plugin/test/integration-input-esm/config-js/headless.js @@ -0,0 +1,31 @@ +// Copyright (c) 2023-2024 Developer Innovations, LLC + +/** + * Workaround for https://github.com/cypress-io/cypress/issues/27804. + * + * @param {Cypress.PluginEvents} on + * @returns void + */ +export const fixHeadlessChrome = (on) => { + on( + "before:browser:launch", + /** + * @param {Cypress.Browser} browser, + * @param {Cypress.BrowserLaunchOptions} launchOptions + * @returns {void | Cypress.BrowserLaunchOptions} + */ + (browser, launchOptions) => { + if ( + browser.family === "chromium" && + browser.name !== "electron" && + browser.isHeadless + ) { + launchOptions.args = launchOptions.args.map((arg) => + arg === "--headless" ? "--headless=new" : arg + ); + } + + return launchOptions; + } + ); +}; diff --git a/packages/cypress-plugin/test/integration-input-esm/config-js/tasks.js b/packages/cypress-plugin/test/integration-input-esm/config-js/tasks.js index 4f0f5a3..6be9d7f 100644 --- a/packages/cypress-plugin/test/integration-input-esm/config-js/tasks.js +++ b/packages/cypress-plugin/test/integration-input-esm/config-js/tasks.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC /** * @param {Cypress.PluginEvents} on diff --git a/packages/cypress-plugin/test/integration-input-esm/config-js/webpack.js b/packages/cypress-plugin/test/integration-input-esm/config-js/webpack.js index d159eac..60d0dad 100644 --- a/packages/cypress-plugin/test/integration-input-esm/config-js/webpack.js +++ b/packages/cypress-plugin/test/integration-input-esm/config-js/webpack.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { default as webpack } from "webpack"; diff --git a/packages/cypress-plugin/test/integration-input-esm/config/devtools.ts b/packages/cypress-plugin/test/integration-input-esm/config/devtools.ts index 58d80d5..f117e1a 100644 --- a/packages/cypress-plugin/test/integration-input-esm/config/devtools.ts +++ b/packages/cypress-plugin/test/integration-input-esm/config/devtools.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC export const openDevToolsOnLaunch = (on: Cypress.PluginEvents): void => { // Open DevTools automatically. Only works for headed modes (i.e., not in screenshots or diff --git a/packages/cypress-plugin/test/integration-input-esm/config/headless.ts b/packages/cypress-plugin/test/integration-input-esm/config/headless.ts new file mode 100644 index 0000000..81a2718 --- /dev/null +++ b/packages/cypress-plugin/test/integration-input-esm/config/headless.ts @@ -0,0 +1,24 @@ +// Copyright (c) 2023-2024 Developer Innovations, LLC + +// Workaround for https://github.com/cypress-io/cypress/issues/27804. +export const fixHeadlessChrome = (on: Cypress.PluginEvents): void => { + on( + "before:browser:launch", + ( + browser: Cypress.Browser, + launchOptions: Cypress.BrowserLaunchOptions + ): void | Cypress.BrowserLaunchOptions => { + if ( + browser.family === "chromium" && + browser.name !== "electron" && + browser.isHeadless + ) { + launchOptions.args = launchOptions.args.map((arg) => + arg === "--headless" ? "--headless=new" : arg + ); + } + + return launchOptions; + } + ); +}; diff --git a/packages/cypress-plugin/test/integration-input-esm/config/tasks.ts b/packages/cypress-plugin/test/integration-input-esm/config/tasks.ts index 5d492df..0a5cb4f 100644 --- a/packages/cypress-plugin/test/integration-input-esm/config/tasks.ts +++ b/packages/cypress-plugin/test/integration-input-esm/config/tasks.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC export const registerTasks = (on: Cypress.PluginEvents): void => { // Used for both testing that the support file gets loaded and testing that the project's diff --git a/packages/cypress-plugin/test/integration-input-esm/config/webpack.ts b/packages/cypress-plugin/test/integration-input-esm/config/webpack.ts index ff784d0..ca31892 100644 --- a/packages/cypress-plugin/test/integration-input-esm/config/webpack.ts +++ b/packages/cypress-plugin/test/integration-input-esm/config/webpack.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { default as webpack } from "webpack"; diff --git a/packages/cypress-plugin/test/integration-input-esm/cypress-config.cjs b/packages/cypress-plugin/test/integration-input-esm/cypress-config.cjs index cb9736e..d85ac80 100644 --- a/packages/cypress-plugin/test/integration-input-esm/cypress-config.cjs +++ b/packages/cypress-plugin/test/integration-input-esm/cypress-config.cjs @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC const { registerSimpleGitMock } = require("unflakable-test-common/dist/git"); const { @@ -17,6 +17,9 @@ module.exports = { * @returns {Promise | Cypress.PluginConfigOptions | void} */ async setupNodeEvents(on, _config) { + const { fixHeadlessChrome } = await import("./config-js/headless.js"); + + fixHeadlessChrome(on); registerCosmiconfigMock(); registerSimpleGitMock(); @@ -38,6 +41,9 @@ module.exports = { * @returns {Promise | Cypress.PluginConfigOptions | void} */ async setupNodeEvents(on, _config) { + const { fixHeadlessChrome } = await import("./config-js/headless.js"); + + fixHeadlessChrome(on); registerCosmiconfigMock(); registerSimpleGitMock(); diff --git a/packages/cypress-plugin/test/integration-input-esm/cypress-config.js b/packages/cypress-plugin/test/integration-input-esm/cypress-config.js index ee5d049..4cd3f6e 100644 --- a/packages/cypress-plugin/test/integration-input-esm/cypress-config.js +++ b/packages/cypress-plugin/test/integration-input-esm/cypress-config.js @@ -1,10 +1,11 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { openDevToolsOnLaunch } from "./config-js/devtools.js"; import { registerTasks } from "./config-js/tasks.js"; import webpackConfig from "./config-js/webpack.js"; import { registerSimpleGitMock } from "unflakable-test-common/dist/git.js"; import { registerCosmiconfigMock } from "unflakable-test-common/dist/config.js"; +import { fixHeadlessChrome } from "./config-js/headless.js"; /** * @type {Cypress.ConfigOptions} @@ -17,6 +18,7 @@ export default { * @returns {Promise | Cypress.PluginConfigOptions | void} */ setupNodeEvents(on, _config) { + fixHeadlessChrome(on); registerCosmiconfigMock(); registerSimpleGitMock(); registerTasks(on); @@ -35,6 +37,7 @@ export default { * @returns {Promise | Cypress.PluginConfigOptions | void} */ setupNodeEvents(on, _config) { + fixHeadlessChrome(on); registerCosmiconfigMock(); registerSimpleGitMock(); registerTasks(on); diff --git a/packages/cypress-plugin/test/integration-input-esm/cypress.config.ts b/packages/cypress-plugin/test/integration-input-esm/cypress.config.ts index c7f9649..9b90f72 100644 --- a/packages/cypress-plugin/test/integration-input-esm/cypress.config.ts +++ b/packages/cypress-plugin/test/integration-input-esm/cypress.config.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { defineConfig } from "cypress"; // Relative import paths require file extensions in ESM. @@ -8,10 +8,12 @@ import { registerTasks } from "./config/tasks.js"; import webpackConfig from "./config/webpack.js"; import { registerSimpleGitMock } from "unflakable-test-common/dist/git.js"; import { registerCosmiconfigMock } from "unflakable-test-common/dist/config.js"; +import { fixHeadlessChrome } from "./config/headless.js"; export default defineConfig({ component: { setupNodeEvents(on: Cypress.PluginEvents, _config) { + fixHeadlessChrome(on); registerCosmiconfigMock(); registerSimpleGitMock(); registerTasks(on); @@ -31,6 +33,7 @@ export default defineConfig({ | Promise | Cypress.PluginConfigOptions | void { + fixHeadlessChrome(on); registerCosmiconfigMock(); registerSimpleGitMock(); registerTasks(on); diff --git a/packages/cypress-plugin/test/integration-input-esm/cypress/support-js/commands.js b/packages/cypress-plugin/test/integration-input-esm/cypress/support-js/commands.js index 1a7516c..5eb705e 100644 --- a/packages/cypress-plugin/test/integration-input-esm/cypress/support-js/commands.js +++ b/packages/cypress-plugin/test/integration-input-esm/cypress/support-js/commands.js @@ -1,3 +1,3 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC Cypress.Commands.add("consoleLog", (msg) => cy.task("log", msg)); diff --git a/packages/cypress-plugin/test/integration-input-esm/cypress/support-js/component.cjs b/packages/cypress-plugin/test/integration-input-esm/cypress/support-js/component.cjs index 0b677aa..b257777 100644 --- a/packages/cypress-plugin/test/integration-input-esm/cypress/support-js/component.cjs +++ b/packages/cypress-plugin/test/integration-input-esm/cypress/support-js/component.cjs @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC require("./commands.js"); diff --git a/packages/cypress-plugin/test/integration-input-esm/cypress/support-js/component.js b/packages/cypress-plugin/test/integration-input-esm/cypress/support-js/component.js index 3c38662..e784a05 100644 --- a/packages/cypress-plugin/test/integration-input-esm/cypress/support-js/component.js +++ b/packages/cypress-plugin/test/integration-input-esm/cypress/support-js/component.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC // Import commands.js using ES2015 syntax: import "./commands.js"; diff --git a/packages/cypress-plugin/test/integration-input-esm/cypress/support-js/e2e.cjs b/packages/cypress-plugin/test/integration-input-esm/cypress/support-js/e2e.cjs index c254fe4..cd10e9e 100644 --- a/packages/cypress-plugin/test/integration-input-esm/cypress/support-js/e2e.cjs +++ b/packages/cypress-plugin/test/integration-input-esm/cypress/support-js/e2e.cjs @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC // Import commands.js using CJS syntax: require("./commands.js"); diff --git a/packages/cypress-plugin/test/integration-input-esm/cypress/support-js/e2e.js b/packages/cypress-plugin/test/integration-input-esm/cypress/support-js/e2e.js index 0447f29..1e2cc15 100644 --- a/packages/cypress-plugin/test/integration-input-esm/cypress/support-js/e2e.js +++ b/packages/cypress-plugin/test/integration-input-esm/cypress/support-js/e2e.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC // Import commands.js using ES2015 syntax: import "./commands.js"; diff --git a/packages/cypress-plugin/test/integration-input-esm/cypress/support/commands.ts b/packages/cypress-plugin/test/integration-input-esm/cypress/support/commands.ts index a6cb68a..876f349 100644 --- a/packages/cypress-plugin/test/integration-input-esm/cypress/support/commands.ts +++ b/packages/cypress-plugin/test/integration-input-esm/cypress/support/commands.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC // Webpack non-deterministically reports a TypeScript error here when run through Cypress. It seems // to happen when `cypress-support-file` includes diff --git a/packages/cypress-plugin/test/integration-input-esm/cypress/support/component-index.html b/packages/cypress-plugin/test/integration-input-esm/cypress/support/component-index.html index e39ba42..92d3f43 100644 --- a/packages/cypress-plugin/test/integration-input-esm/cypress/support/component-index.html +++ b/packages/cypress-plugin/test/integration-input-esm/cypress/support/component-index.html @@ -1,3 +1,5 @@ + + diff --git a/packages/cypress-plugin/test/integration-input-esm/cypress/support/component.ts b/packages/cypress-plugin/test/integration-input-esm/cypress/support/component.ts index 87db971..8225d55 100644 --- a/packages/cypress-plugin/test/integration-input-esm/cypress/support/component.ts +++ b/packages/cypress-plugin/test/integration-input-esm/cypress/support/component.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import "./commands.ts"; diff --git a/packages/cypress-plugin/test/integration-input-esm/cypress/support/e2e.ts b/packages/cypress-plugin/test/integration-input-esm/cypress/support/e2e.ts index 8fd06b4..9127c7b 100644 --- a/packages/cypress-plugin/test/integration-input-esm/cypress/support/e2e.ts +++ b/packages/cypress-plugin/test/integration-input-esm/cypress/support/e2e.ts @@ -1,3 +1,3 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import "./commands.ts"; diff --git a/packages/cypress-plugin/test/integration-input-manual/config/devtools.js b/packages/cypress-plugin/test/integration-input-manual/config/devtools.js index c117765..e96f27e 100644 --- a/packages/cypress-plugin/test/integration-input-manual/config/devtools.js +++ b/packages/cypress-plugin/test/integration-input-manual/config/devtools.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC module.exports = { /** diff --git a/packages/cypress-plugin/test/integration-input-manual/config/headless.js b/packages/cypress-plugin/test/integration-input-manual/config/headless.js new file mode 100644 index 0000000..f6540a0 --- /dev/null +++ b/packages/cypress-plugin/test/integration-input-manual/config/headless.js @@ -0,0 +1,33 @@ +// Copyright (c) 2023-2024 Developer Innovations, LLC + +module.exports = { + /** + * Workaround for https://github.com/cypress-io/cypress/issues/27804. + * + * @param {Cypress.PluginEvents} on + * @returns void + */ + fixHeadlessChrome: (on) => { + on( + "before:browser:launch", + /** + * @param {Cypress.Browser} browser, + * @param {Cypress.BrowserLaunchOptions} launchOptions + * @returns {void | Cypress.BrowserLaunchOptions} + */ + (browser, launchOptions) => { + if ( + browser.family === "chromium" && + browser.name !== "electron" && + browser.isHeadless + ) { + launchOptions.args = launchOptions.args.map((arg) => + arg === "--headless" ? "--headless=new" : arg + ); + } + + return launchOptions; + } + ); + }, +}; diff --git a/packages/cypress-plugin/test/integration-input-manual/config/tasks.js b/packages/cypress-plugin/test/integration-input-manual/config/tasks.js index 95cba3e..45c7d8a 100644 --- a/packages/cypress-plugin/test/integration-input-manual/config/tasks.js +++ b/packages/cypress-plugin/test/integration-input-manual/config/tasks.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC module.exports = { /** diff --git a/packages/cypress-plugin/test/integration-input-manual/config/webpack.js b/packages/cypress-plugin/test/integration-input-manual/config/webpack.js index c6501b8..6e44c41 100644 --- a/packages/cypress-plugin/test/integration-input-manual/config/webpack.js +++ b/packages/cypress-plugin/test/integration-input-manual/config/webpack.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC const webpack = require("webpack"); diff --git a/packages/cypress-plugin/test/integration-input-manual/cypress-config.mjs b/packages/cypress-plugin/test/integration-input-manual/cypress-config.mjs index 952022a..e372c25 100644 --- a/packages/cypress-plugin/test/integration-input-manual/cypress-config.mjs +++ b/packages/cypress-plugin/test/integration-input-manual/cypress-config.mjs @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import devtools from "./config/devtools.js"; import tasks from "./config/tasks.js"; @@ -8,6 +8,8 @@ import { registerCosmiconfigMock } from "unflakable-test-common/dist/config.js"; import { registerUnflakable } from "@unflakable/cypress-plugin"; import semverGte from "semver/functions/gte.js"; import path from "path"; +import headless from "./config/headless.js"; +import cypressOnFix from "cypress-on-fix"; /** * @type {Cypress.ConfigOptions} @@ -15,11 +17,13 @@ import path from "path"; export default { component: { /** - * @param {Cypress.PluginEvents} on + * @param {Cypress.PluginEvents} baseOn * @param {Cypress.PluginConfigOptions} config * @returns {Promise | Cypress.PluginConfigOptions | void} */ - setupNodeEvents(on, config) { + setupNodeEvents(baseOn, config) { + const on = cypressOnFix(baseOn); + headless.fixHeadlessChrome(on); registerCosmiconfigMock(); registerSimpleGitMock(); tasks.registerTasks(on); @@ -35,11 +39,13 @@ export default { }, e2e: { /** - * @param {Cypress.PluginEvents} on + * @param {Cypress.PluginEvents} baseOn * @param {Cypress.PluginConfigOptions} config * @returns {Promise | Cypress.PluginConfigOptions | void} */ - setupNodeEvents(on, config) { + setupNodeEvents(baseOn, config) { + const on = cypressOnFix(baseOn); + headless.fixHeadlessChrome(on); registerCosmiconfigMock(); registerSimpleGitMock(); tasks.registerTasks(on); diff --git a/packages/cypress-plugin/test/integration-input-manual/cypress.config.js b/packages/cypress-plugin/test/integration-input-manual/cypress.config.js index 9e0a4e8..b45cbd1 100644 --- a/packages/cypress-plugin/test/integration-input-manual/cypress.config.js +++ b/packages/cypress-plugin/test/integration-input-manual/cypress.config.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC const { openDevToolsOnLaunch } = require("./config/devtools"); const { registerTasks } = require("./config/tasks"); @@ -11,6 +11,8 @@ const semverGte = require("semver/functions/gte"); const { registerUnflakable } = require("@unflakable/cypress-plugin"); const path = require("path"); +const { fixHeadlessChrome } = require("./config/headless"); +const cypressOnFix = require("cypress-on-fix"); module.exports = { /** @@ -18,11 +20,13 @@ module.exports = { */ component: { /** - * @param {Cypress.PluginEvents} on + * @param {Cypress.PluginEvents} baseOn * @param {Cypress.PluginConfigOptions} config * @returns {Promise | Cypress.PluginConfigOptions | void} */ - setupNodeEvents(on, config) { + setupNodeEvents(baseOn, config) { + const on = cypressOnFix(baseOn); + fixHeadlessChrome(on); registerCosmiconfigMock(); registerSimpleGitMock(); registerTasks(on); @@ -38,11 +42,13 @@ module.exports = { }, e2e: { /** - * @param {Cypress.PluginEvents} on + * @param {Cypress.PluginEvents} baseOn * @param {Cypress.PluginConfigOptions} config * @returns {Promise | Cypress.PluginConfigOptions | void} */ - setupNodeEvents(on, config) { + setupNodeEvents(baseOn, config) { + const on = cypressOnFix(baseOn); + fixHeadlessChrome(on); registerCosmiconfigMock(); registerSimpleGitMock(); registerTasks(on); diff --git a/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/fail.cy.js b/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/fail.cy.js index c1bec18..cc6a872 100644 --- a/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/fail.cy.js +++ b/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/fail.cy.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC const testFn = Cypress.env("SKIP_FAILURES") !== undefined ? it.skip : it; diff --git a/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/flake.cy.js b/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/flake.cy.js index 1bab7bc..fef71a2 100644 --- a/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/flake.cy.js +++ b/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/flake.cy.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC /* let calls = 0; diff --git a/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/hook-fail.cy.js b/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/hook-fail.cy.js index 297f0bb..3478d79 100644 --- a/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/hook-fail.cy.js +++ b/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/hook-fail.cy.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC describe("describe block", () => { if (Cypress.env("SKIP_BEFORE_HOOK") === undefined) { diff --git a/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/invalid.cy.js b/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/invalid.cy.js index aa580f4..a5af12b 100644 --- a/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/invalid.cy.js +++ b/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/invalid.cy.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC if (Cypress.env("SKIP_FAILURES") === undefined) { throw new Error("invalid test file"); diff --git a/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/mixed/mixed.cy.js b/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/mixed/mixed.cy.js index e731026..3094edd 100644 --- a/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/mixed/mixed.cy.js +++ b/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/mixed/mixed.cy.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC describe("spec with mixed test results", () => { const quarantinedTestFn = diff --git a/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/pass.cy.js b/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/pass.cy.js index 05d345a..5b22ca4 100644 --- a/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/pass.cy.js +++ b/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/pass.cy.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC it("should pass", () => { // Make sure the project's support file works even when skip_tests generates a temporary one on diff --git a/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/pending.cy.js b/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/pending.cy.js index 2704e82..8f7488a 100644 --- a/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/pending.cy.js +++ b/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/pending.cy.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC it("stub should be pending"); diff --git a/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/quarantined.cy.js b/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/quarantined.cy.js index f43ebc0..6682e4c 100644 --- a/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/quarantined.cy.js +++ b/packages/cypress-plugin/test/integration-input-manual/cypress/e2e/quarantined.cy.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC describe("describe block", () => { (Cypress.env("SKIP_QUARANTINED") !== undefined ? it.skip : it)( diff --git a/packages/cypress-plugin/test/integration-input-manual/cypress/support/commands.js b/packages/cypress-plugin/test/integration-input-manual/cypress/support/commands.js index 1a7516c..5eb705e 100644 --- a/packages/cypress-plugin/test/integration-input-manual/cypress/support/commands.js +++ b/packages/cypress-plugin/test/integration-input-manual/cypress/support/commands.js @@ -1,3 +1,3 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC Cypress.Commands.add("consoleLog", (msg) => cy.task("log", msg)); diff --git a/packages/cypress-plugin/test/integration-input-manual/cypress/support/component-index.html b/packages/cypress-plugin/test/integration-input-manual/cypress/support/component-index.html index e39ba42..92d3f43 100644 --- a/packages/cypress-plugin/test/integration-input-manual/cypress/support/component-index.html +++ b/packages/cypress-plugin/test/integration-input-manual/cypress/support/component-index.html @@ -1,3 +1,5 @@ + + diff --git a/packages/cypress-plugin/test/integration-input-manual/cypress/support/component.js b/packages/cypress-plugin/test/integration-input-manual/cypress/support/component.js index 5d0823f..d60f49e 100644 --- a/packages/cypress-plugin/test/integration-input-manual/cypress/support/component.js +++ b/packages/cypress-plugin/test/integration-input-manual/cypress/support/component.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC require("./commands"); diff --git a/packages/cypress-plugin/test/integration-input-manual/cypress/support/e2e-webpack5.js b/packages/cypress-plugin/test/integration-input-manual/cypress/support/e2e-webpack5.js index 088357d..8defad6 100644 --- a/packages/cypress-plugin/test/integration-input-manual/cypress/support/e2e-webpack5.js +++ b/packages/cypress-plugin/test/integration-input-manual/cypress/support/e2e-webpack5.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC // Import commands.js using CJS syntax: require("./commands.js"); diff --git a/packages/cypress-plugin/test/integration-input-manual/cypress/support/e2e.js b/packages/cypress-plugin/test/integration-input-manual/cypress/support/e2e.js index 9033340..5ae257d 100644 --- a/packages/cypress-plugin/test/integration-input-manual/cypress/support/e2e.js +++ b/packages/cypress-plugin/test/integration-input-manual/cypress/support/e2e.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC // Import commands.js using CJS syntax: require("./commands.js"); diff --git a/packages/cypress-plugin/test/integration-input-manual/package.json b/packages/cypress-plugin/test/integration-input-manual/package.json index 49515a8..c67d68d 100644 --- a/packages/cypress-plugin/test/integration-input-manual/package.json +++ b/packages/cypress-plugin/test/integration-input-manual/package.json @@ -11,6 +11,7 @@ "@unflakable/cypress-plugin": "workspace:^", "cypress": "11.2 - 13", "cypress-multi-reporters": "^1.6.3", + "cypress-on-fix": "^1.0.2", "mocha": "=7.0.1", "mocha-junit-reporter": "^2.2.0", "process": "^0.11.10", diff --git a/packages/cypress-plugin/test/integration-input/.eslintrc.js b/packages/cypress-plugin/test/integration-input/.eslintrc.js index b6febf5..0015a28 100644 --- a/packages/cypress-plugin/test/integration-input/.eslintrc.js +++ b/packages/cypress-plugin/test/integration-input/.eslintrc.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC module.exports = { extends: ["../../../../.eslintrc-ts.js"], diff --git a/packages/cypress-plugin/test/integration-input/config-js/devtools.js b/packages/cypress-plugin/test/integration-input/config-js/devtools.js index c117765..e96f27e 100644 --- a/packages/cypress-plugin/test/integration-input/config-js/devtools.js +++ b/packages/cypress-plugin/test/integration-input/config-js/devtools.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC module.exports = { /** diff --git a/packages/cypress-plugin/test/integration-input/config-js/headless.js b/packages/cypress-plugin/test/integration-input/config-js/headless.js new file mode 100644 index 0000000..f6540a0 --- /dev/null +++ b/packages/cypress-plugin/test/integration-input/config-js/headless.js @@ -0,0 +1,33 @@ +// Copyright (c) 2023-2024 Developer Innovations, LLC + +module.exports = { + /** + * Workaround for https://github.com/cypress-io/cypress/issues/27804. + * + * @param {Cypress.PluginEvents} on + * @returns void + */ + fixHeadlessChrome: (on) => { + on( + "before:browser:launch", + /** + * @param {Cypress.Browser} browser, + * @param {Cypress.BrowserLaunchOptions} launchOptions + * @returns {void | Cypress.BrowserLaunchOptions} + */ + (browser, launchOptions) => { + if ( + browser.family === "chromium" && + browser.name !== "electron" && + browser.isHeadless + ) { + launchOptions.args = launchOptions.args.map((arg) => + arg === "--headless" ? "--headless=new" : arg + ); + } + + return launchOptions; + } + ); + }, +}; diff --git a/packages/cypress-plugin/test/integration-input/config-js/tasks.js b/packages/cypress-plugin/test/integration-input/config-js/tasks.js index 95cba3e..45c7d8a 100644 --- a/packages/cypress-plugin/test/integration-input/config-js/tasks.js +++ b/packages/cypress-plugin/test/integration-input/config-js/tasks.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC module.exports = { /** diff --git a/packages/cypress-plugin/test/integration-input/config-js/webpack.js b/packages/cypress-plugin/test/integration-input/config-js/webpack.js index c6501b8..6e44c41 100644 --- a/packages/cypress-plugin/test/integration-input/config-js/webpack.js +++ b/packages/cypress-plugin/test/integration-input/config-js/webpack.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC const webpack = require("webpack"); diff --git a/packages/cypress-plugin/test/integration-input/config/devtools.ts b/packages/cypress-plugin/test/integration-input/config/devtools.ts index 58d80d5..f117e1a 100644 --- a/packages/cypress-plugin/test/integration-input/config/devtools.ts +++ b/packages/cypress-plugin/test/integration-input/config/devtools.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC export const openDevToolsOnLaunch = (on: Cypress.PluginEvents): void => { // Open DevTools automatically. Only works for headed modes (i.e., not in screenshots or diff --git a/packages/cypress-plugin/test/integration-input/config/headless.ts b/packages/cypress-plugin/test/integration-input/config/headless.ts new file mode 100644 index 0000000..81a2718 --- /dev/null +++ b/packages/cypress-plugin/test/integration-input/config/headless.ts @@ -0,0 +1,24 @@ +// Copyright (c) 2023-2024 Developer Innovations, LLC + +// Workaround for https://github.com/cypress-io/cypress/issues/27804. +export const fixHeadlessChrome = (on: Cypress.PluginEvents): void => { + on( + "before:browser:launch", + ( + browser: Cypress.Browser, + launchOptions: Cypress.BrowserLaunchOptions + ): void | Cypress.BrowserLaunchOptions => { + if ( + browser.family === "chromium" && + browser.name !== "electron" && + browser.isHeadless + ) { + launchOptions.args = launchOptions.args.map((arg) => + arg === "--headless" ? "--headless=new" : arg + ); + } + + return launchOptions; + } + ); +}; diff --git a/packages/cypress-plugin/test/integration-input/config/tasks.ts b/packages/cypress-plugin/test/integration-input/config/tasks.ts index 5d492df..0a5cb4f 100644 --- a/packages/cypress-plugin/test/integration-input/config/tasks.ts +++ b/packages/cypress-plugin/test/integration-input/config/tasks.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC export const registerTasks = (on: Cypress.PluginEvents): void => { // Used for both testing that the support file gets loaded and testing that the project's diff --git a/packages/cypress-plugin/test/integration-input/config/webpack.ts b/packages/cypress-plugin/test/integration-input/config/webpack.ts index d159eac..60d0dad 100644 --- a/packages/cypress-plugin/test/integration-input/config/webpack.ts +++ b/packages/cypress-plugin/test/integration-input/config/webpack.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { default as webpack } from "webpack"; diff --git a/packages/cypress-plugin/test/integration-input/cypress-config.js b/packages/cypress-plugin/test/integration-input/cypress-config.js index 50319f0..2131165 100644 --- a/packages/cypress-plugin/test/integration-input/cypress-config.js +++ b/packages/cypress-plugin/test/integration-input/cypress-config.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC const { openDevToolsOnLaunch } = require("config-js/devtools"); const webpackConfig = require("config-js/webpack"); @@ -7,6 +7,7 @@ const { registerSimpleGitMock } = require("unflakable-test-common/dist/git"); const { registerCosmiconfigMock, } = require("unflakable-test-common/dist/config"); +const { fixHeadlessChrome } = require("config-js/headless"); module.exports = { /** @@ -20,6 +21,7 @@ module.exports = { * @returns {Promise | Cypress.PluginConfigOptions | void} */ setupNodeEvents(on, _config) { + fixHeadlessChrome(on); registerCosmiconfigMock(); registerSimpleGitMock(); registerTasks(on); @@ -38,6 +40,7 @@ module.exports = { * @returns {Promise | Cypress.PluginConfigOptions | void} */ setupNodeEvents(on, _config) { + fixHeadlessChrome(on); registerCosmiconfigMock(); registerSimpleGitMock(); registerTasks(on); diff --git a/packages/cypress-plugin/test/integration-input/cypress-config.mjs b/packages/cypress-plugin/test/integration-input/cypress-config.mjs index b6e6c0f..caa4a1c 100644 --- a/packages/cypress-plugin/test/integration-input/cypress-config.mjs +++ b/packages/cypress-plugin/test/integration-input/cypress-config.mjs @@ -1,10 +1,11 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import devtools from "./config-js/devtools.js"; import tasks from "./config-js/tasks.js"; import webpackConfig from "./config-js/webpack.js"; import { registerSimpleGitMock } from "unflakable-test-common/dist/git.js"; import { registerCosmiconfigMock } from "unflakable-test-common/dist/config.js"; +import headless from "./config-js/headless.js"; /** * @type {Cypress.ConfigOptions} @@ -17,6 +18,7 @@ export default { * @returns {Promise | Cypress.PluginConfigOptions | void} */ setupNodeEvents(on, _config) { + headless.fixHeadlessChrome(on); registerCosmiconfigMock(); registerSimpleGitMock(); tasks.registerTasks(on); @@ -35,6 +37,7 @@ export default { * @returns {Promise | Cypress.PluginConfigOptions | void} */ setupNodeEvents(on, _config) { + headless.fixHeadlessChrome(on); registerCosmiconfigMock(); registerSimpleGitMock(); tasks.registerTasks(on); diff --git a/packages/cypress-plugin/test/integration-input/cypress.config.ts b/packages/cypress-plugin/test/integration-input/cypress.config.ts index 1a6359b..2cc784d 100644 --- a/packages/cypress-plugin/test/integration-input/cypress.config.ts +++ b/packages/cypress-plugin/test/integration-input/cypress.config.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { registerSimpleGitMock } from "unflakable-test-common/dist/git"; import { registerCosmiconfigMock } from "unflakable-test-common/dist/config"; @@ -12,10 +12,14 @@ import { openDevToolsOnLaunch } from "config/devtools"; import webpackConfig from "config/webpack"; // eslint-disable-next-line import/no-unresolved import { registerTasks } from "config/tasks"; +// eslint-disable-next-line import/no-unresolved +import { fixHeadlessChrome } from "config/headless"; +import cypressOnFix from "cypress-on-fix"; export default defineConfig({ component: { setupNodeEvents(on: Cypress.PluginEvents, _config) { + fixHeadlessChrome(on); registerCosmiconfigMock(); registerSimpleGitMock(); registerTasks(on); @@ -30,12 +34,20 @@ export default defineConfig({ }, e2e: { setupNodeEvents( - on: Cypress.PluginEvents, + baseOn: Cypress.PluginEvents, _config ): | Promise | Cypress.PluginConfigOptions | void { + // Due to https://github.com/cypress-io/cypress/issues/22428, only the last event handler + // registered for each event type will be called. This means we'll clobber any event handlers + // the user registers. To avoid this, we use cypress-on-fix. + // NB: Our plugin ordinarily does this for us, but we use this package to test what happens + // when the plugin is disabled. + const on = cypressOnFix(baseOn); + + fixHeadlessChrome(on); registerCosmiconfigMock(); registerSimpleGitMock(); registerTasks(on); diff --git a/packages/cypress-plugin/test/integration-input/cypress/component/fail.cy.ts b/packages/cypress-plugin/test/integration-input/cypress/component/fail.cy.ts index 94b40a9..167c20f 100644 --- a/packages/cypress-plugin/test/integration-input/cypress/component/fail.cy.ts +++ b/packages/cypress-plugin/test/integration-input/cypress/component/fail.cy.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC const testFn = Cypress.env("SKIP_FAILURES") !== undefined ? it.skip : it; diff --git a/packages/cypress-plugin/test/integration-input/cypress/component/flake.cy.ts b/packages/cypress-plugin/test/integration-input/cypress/component/flake.cy.ts index 6cda5a0..6011bf6 100644 --- a/packages/cypress-plugin/test/integration-input/cypress/component/flake.cy.ts +++ b/packages/cypress-plugin/test/integration-input/cypress/component/flake.cy.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC /* let calls = 0; diff --git a/packages/cypress-plugin/test/integration-input/cypress/component/hook-fail.cy.ts b/packages/cypress-plugin/test/integration-input/cypress/component/hook-fail.cy.ts index 08c00f3..ba0a1c1 100644 --- a/packages/cypress-plugin/test/integration-input/cypress/component/hook-fail.cy.ts +++ b/packages/cypress-plugin/test/integration-input/cypress/component/hook-fail.cy.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC describe("describe block", () => { if (Cypress.env("SKIP_BEFORE_HOOK") === undefined) { diff --git a/packages/cypress-plugin/test/integration-input/cypress/component/invalid.cy.ts b/packages/cypress-plugin/test/integration-input/cypress/component/invalid.cy.ts index aa580f4..a5af12b 100644 --- a/packages/cypress-plugin/test/integration-input/cypress/component/invalid.cy.ts +++ b/packages/cypress-plugin/test/integration-input/cypress/component/invalid.cy.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC if (Cypress.env("SKIP_FAILURES") === undefined) { throw new Error("invalid test file"); diff --git a/packages/cypress-plugin/test/integration-input/cypress/component/mixed/mixed.cy.ts b/packages/cypress-plugin/test/integration-input/cypress/component/mixed/mixed.cy.ts index b0ee438..5fd29be 100644 --- a/packages/cypress-plugin/test/integration-input/cypress/component/mixed/mixed.cy.ts +++ b/packages/cypress-plugin/test/integration-input/cypress/component/mixed/mixed.cy.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC describe("spec with mixed test results", () => { const quarantinedTestFn = diff --git a/packages/cypress-plugin/test/integration-input/cypress/component/pass.cy.ts b/packages/cypress-plugin/test/integration-input/cypress/component/pass.cy.ts index 05d345a..5b22ca4 100644 --- a/packages/cypress-plugin/test/integration-input/cypress/component/pass.cy.ts +++ b/packages/cypress-plugin/test/integration-input/cypress/component/pass.cy.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC it("should pass", () => { // Make sure the project's support file works even when skip_tests generates a temporary one on diff --git a/packages/cypress-plugin/test/integration-input/cypress/component/pending.cy.ts b/packages/cypress-plugin/test/integration-input/cypress/component/pending.cy.ts index 2704e82..8f7488a 100644 --- a/packages/cypress-plugin/test/integration-input/cypress/component/pending.cy.ts +++ b/packages/cypress-plugin/test/integration-input/cypress/component/pending.cy.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC it("stub should be pending"); diff --git a/packages/cypress-plugin/test/integration-input/cypress/component/quarantined.cy.ts b/packages/cypress-plugin/test/integration-input/cypress/component/quarantined.cy.ts index f43ebc0..6682e4c 100644 --- a/packages/cypress-plugin/test/integration-input/cypress/component/quarantined.cy.ts +++ b/packages/cypress-plugin/test/integration-input/cypress/component/quarantined.cy.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC describe("describe block", () => { (Cypress.env("SKIP_QUARANTINED") !== undefined ? it.skip : it)( diff --git a/packages/cypress-plugin/test/integration-input/cypress/support-js/commands.js b/packages/cypress-plugin/test/integration-input/cypress/support-js/commands.js index 1a7516c..5eb705e 100644 --- a/packages/cypress-plugin/test/integration-input/cypress/support-js/commands.js +++ b/packages/cypress-plugin/test/integration-input/cypress/support-js/commands.js @@ -1,3 +1,3 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC Cypress.Commands.add("consoleLog", (msg) => cy.task("log", msg)); diff --git a/packages/cypress-plugin/test/integration-input/cypress/support-js/component.js b/packages/cypress-plugin/test/integration-input/cypress/support-js/component.js index fea2a9b..04783d5 100644 --- a/packages/cypress-plugin/test/integration-input/cypress/support-js/component.js +++ b/packages/cypress-plugin/test/integration-input/cypress/support-js/component.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC require("./commands"); diff --git a/packages/cypress-plugin/test/integration-input/cypress/support-js/component.mjs b/packages/cypress-plugin/test/integration-input/cypress/support-js/component.mjs index 3c38662..e784a05 100644 --- a/packages/cypress-plugin/test/integration-input/cypress/support-js/component.mjs +++ b/packages/cypress-plugin/test/integration-input/cypress/support-js/component.mjs @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC // Import commands.js using ES2015 syntax: import "./commands.js"; diff --git a/packages/cypress-plugin/test/integration-input/cypress/support-js/e2e.js b/packages/cypress-plugin/test/integration-input/cypress/support-js/e2e.js index c254fe4..cd10e9e 100644 --- a/packages/cypress-plugin/test/integration-input/cypress/support-js/e2e.js +++ b/packages/cypress-plugin/test/integration-input/cypress/support-js/e2e.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC // Import commands.js using CJS syntax: require("./commands.js"); diff --git a/packages/cypress-plugin/test/integration-input/cypress/support-js/e2e.mjs b/packages/cypress-plugin/test/integration-input/cypress/support-js/e2e.mjs index 0447f29..1e2cc15 100644 --- a/packages/cypress-plugin/test/integration-input/cypress/support-js/e2e.mjs +++ b/packages/cypress-plugin/test/integration-input/cypress/support-js/e2e.mjs @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC // Import commands.js using ES2015 syntax: import "./commands.js"; diff --git a/packages/cypress-plugin/test/integration-input/cypress/support/commands.ts b/packages/cypress-plugin/test/integration-input/cypress/support/commands.ts index 966021a..ad471e1 100644 --- a/packages/cypress-plugin/test/integration-input/cypress/support/commands.ts +++ b/packages/cypress-plugin/test/integration-input/cypress/support/commands.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC /// diff --git a/packages/cypress-plugin/test/integration-input/cypress/support/component-index.html b/packages/cypress-plugin/test/integration-input/cypress/support/component-index.html index e39ba42..b2019a7 100644 --- a/packages/cypress-plugin/test/integration-input/cypress/support/component-index.html +++ b/packages/cypress-plugin/test/integration-input/cypress/support/component-index.html @@ -1,3 +1,5 @@ + + diff --git a/packages/cypress-plugin/test/integration-input/cypress/support/component.ts b/packages/cypress-plugin/test/integration-input/cypress/support/component.ts index 5fbee34..08f39a2 100644 --- a/packages/cypress-plugin/test/integration-input/cypress/support/component.ts +++ b/packages/cypress-plugin/test/integration-input/cypress/support/component.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC // Import commands.js using ES2015 syntax: import "./commands"; diff --git a/packages/cypress-plugin/test/integration-input/cypress/support/e2e.ts b/packages/cypress-plugin/test/integration-input/cypress/support/e2e.ts index 5aa0b7c..4284eff 100644 --- a/packages/cypress-plugin/test/integration-input/cypress/support/e2e.ts +++ b/packages/cypress-plugin/test/integration-input/cypress/support/e2e.ts @@ -1,3 +1,3 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import "./commands"; diff --git a/packages/cypress-plugin/test/integration-input/tsconfig.json b/packages/cypress-plugin/test/integration-input/tsconfig.json index e3ff93e..e7f8717 100644 --- a/packages/cypress-plugin/test/integration-input/tsconfig.json +++ b/packages/cypress-plugin/test/integration-input/tsconfig.json @@ -11,6 +11,7 @@ "types": ["cypress", "node"] }, "include": [ + "../../cypress-on-fix.d.ts", ".eslintrc.js", "config", "config-js", diff --git a/packages/cypress-plugin/test/integration/.eslintrc.js b/packages/cypress-plugin/test/integration/.eslintrc.js index b6febf5..0015a28 100644 --- a/packages/cypress-plugin/test/integration/.eslintrc.js +++ b/packages/cypress-plugin/test/integration/.eslintrc.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC module.exports = { extends: ["../../../../.eslintrc-ts.js"], diff --git a/packages/cypress-plugin/test/integration/jest.config.js b/packages/cypress-plugin/test/integration/jest.config.js index eeb9323..db3dac5 100644 --- a/packages/cypress-plugin/test/integration/jest.config.js +++ b/packages/cypress-plugin/test/integration/jest.config.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC // NB: We *MUST* run this test suite with --runInBand because running multiple instances of Cypress // concurrently on the same machine is not supported and runs into a bunch of race conditions that @@ -13,6 +13,6 @@ module.exports = { setupFilesAfterEnv: ["jest-expect-message", "./src/matchers.ts"], testEnvironment: "node", // NB: This should be greater than TEST_TIMEOUT_MS used by the watchdog in runTestCase(). - testTimeout: 120000, + testTimeout: 240000, verbose: true, }; diff --git a/packages/cypress-plugin/test/integration/package.json b/packages/cypress-plugin/test/integration/package.json index 6382d0b..36a0a97 100644 --- a/packages/cypress-plugin/test/integration/package.json +++ b/packages/cypress-plugin/test/integration/package.json @@ -12,7 +12,7 @@ "jest": "^29.5.0", "jest-environment-node": "^29.5.0", "jest-expect-message": "^1.1.3", - "mockttp": "^3.7.5", + "mockttp": "^3.9.2", "semver": "^7.5.4", "ts-jest": "^29.1.0", "typescript": "^4.9.5", diff --git a/packages/cypress-plugin/test/integration/src/basic-matrix.test.ts b/packages/cypress-plugin/test/integration/src/basic-matrix.test.ts index 60afb14..29cd967 100644 --- a/packages/cypress-plugin/test/integration/src/basic-matrix.test.ts +++ b/packages/cypress-plugin/test/integration/src/basic-matrix.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { defaultSummaryTotals, diff --git a/packages/cypress-plugin/test/integration/src/basic.test.ts b/packages/cypress-plugin/test/integration/src/basic.test.ts index 9435b3c..d785029 100644 --- a/packages/cypress-plugin/test/integration/src/basic.test.ts +++ b/packages/cypress-plugin/test/integration/src/basic.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { integrationTestSuite, diff --git a/packages/cypress-plugin/test/integration/src/config.test.ts b/packages/cypress-plugin/test/integration/src/config.test.ts index fb40b62..ffc364b 100644 --- a/packages/cypress-plugin/test/integration/src/config.test.ts +++ b/packages/cypress-plugin/test/integration/src/config.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { integrationTestSuite, integrationTest } from "./test-wrappers"; diff --git a/packages/cypress-plugin/test/integration/src/disable-plugin.test.ts b/packages/cypress-plugin/test/integration/src/disable-plugin.test.ts index 59eb9e1..2539b47 100644 --- a/packages/cypress-plugin/test/integration/src/disable-plugin.test.ts +++ b/packages/cypress-plugin/test/integration/src/disable-plugin.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { defaultSummaryTotals, diff --git a/packages/cypress-plugin/test/integration/src/disable-upload.test.ts b/packages/cypress-plugin/test/integration/src/disable-upload.test.ts index 14b1b3a..fe6f5b4 100644 --- a/packages/cypress-plugin/test/integration/src/disable-upload.test.ts +++ b/packages/cypress-plugin/test/integration/src/disable-upload.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { integrationTest, integrationTestSuite } from "./test-wrappers"; diff --git a/packages/cypress-plugin/test/integration/src/git.test.ts b/packages/cypress-plugin/test/integration/src/git.test.ts index 5546179..1594a79 100644 --- a/packages/cypress-plugin/test/integration/src/git.test.ts +++ b/packages/cypress-plugin/test/integration/src/git.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { integrationTest, integrationTestSuite } from "./test-wrappers"; import path from "path"; diff --git a/packages/cypress-plugin/test/integration/src/hook-failures.test.ts b/packages/cypress-plugin/test/integration/src/hook-failures.test.ts index 06df22f..68fedf1 100644 --- a/packages/cypress-plugin/test/integration/src/hook-failures.test.ts +++ b/packages/cypress-plugin/test/integration/src/hook-failures.test.ts @@ -1,6 +1,14 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { integrationTest, integrationTestSuite } from "./test-wrappers"; +import semverLt from "semver/functions/lt"; +import cypressPackage from "cypress/package.json"; + +// Cypress 13.4 broke the handling of multiple hook failures. Prior to that version, Cypress/Mocha +// reported both errors as failures of the first test in the suite, and then skipped all remaining +// tests. Beginning in 13.4, Cypress skips all tests in the suite and never reports either error. +// This was most likely introduced in https://github.com/cypress-io/cypress/pull/27930. +const supportMultipleHookErrors = semverLt(cypressPackage.version, "13.4.0"); integrationTestSuite((mockBackend) => { it("run should succeed when before() fails and both tests are quarantined", (done) => @@ -303,28 +311,31 @@ integrationTestSuite((mockBackend) => { done )); - it("multiple before() hook errors", (done) => - integrationTest( - { - params: { - multipleHookErrors: true, - specNameStubs: ["hook-fail"], - }, - expectedExitCode: 1, - summaryTotals: { - icon: "fail", - numFailing: 1, - numFlaky: 0, - numPassing: 0, - numPending: 0, - numQuarantined: 0, - numSkipped: 1, - numTests: 2, + (supportMultipleHookErrors ? it : it.skip)( + "multiple before() hook errors", + (done) => + integrationTest( + { + params: { + multipleHookErrors: true, + specNameStubs: ["hook-fail"], + }, + expectedExitCode: 1, + summaryTotals: { + icon: "fail", + numFailing: 1, + numFlaky: 0, + numPassing: 0, + numPending: 0, + numQuarantined: 0, + numSkipped: 1, + numTests: 2, + }, }, - }, - mockBackend, - done - )); + mockBackend, + done + ) + ); it("test and afterEach() hook errors", (done) => integrationTest( diff --git a/packages/cypress-plugin/test/integration/src/long-names.test.ts b/packages/cypress-plugin/test/integration/src/long-names.test.ts index 9d18150..9b242f7 100644 --- a/packages/cypress-plugin/test/integration/src/long-names.test.ts +++ b/packages/cypress-plugin/test/integration/src/long-names.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { defaultSummaryTotals, diff --git a/packages/cypress-plugin/test/integration/src/matchers.ts b/packages/cypress-plugin/test/integration/src/matchers.ts index 065a17f..b092d2c 100644 --- a/packages/cypress-plugin/test/integration/src/matchers.ts +++ b/packages/cypress-plugin/test/integration/src/matchers.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { expect } from "@jest/globals"; import type { MatcherFunction } from "expect"; diff --git a/packages/cypress-plugin/test/integration/src/no-quarantine.test.ts b/packages/cypress-plugin/test/integration/src/no-quarantine.test.ts index 3710a9c..c31e12b 100644 --- a/packages/cypress-plugin/test/integration/src/no-quarantine.test.ts +++ b/packages/cypress-plugin/test/integration/src/no-quarantine.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { defaultSummaryTotals, diff --git a/packages/cypress-plugin/test/integration/src/parse-output.ts b/packages/cypress-plugin/test/integration/src/parse-output.ts index 17ad736..b82d778 100644 --- a/packages/cypress-plugin/test/integration/src/parse-output.ts +++ b/packages/cypress-plugin/test/integration/src/parse-output.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC /* eslint-disable no-control-regex */ diff --git a/packages/cypress-plugin/test/integration/src/plugin-failures.test.ts b/packages/cypress-plugin/test/integration/src/plugin-failures.test.ts index b6434d7..09dd6ba 100644 --- a/packages/cypress-plugin/test/integration/src/plugin-failures.test.ts +++ b/packages/cypress-plugin/test/integration/src/plugin-failures.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { defaultSummaryTotals, diff --git a/packages/cypress-plugin/test/integration/src/retries.test.ts b/packages/cypress-plugin/test/integration/src/retries.test.ts index bc99335..ab1acf6 100644 --- a/packages/cypress-plugin/test/integration/src/retries.test.ts +++ b/packages/cypress-plugin/test/integration/src/retries.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { defaultSummaryTotals, diff --git a/packages/cypress-plugin/test/integration/src/run-test-case.ts b/packages/cypress-plugin/test/integration/src/run-test-case.ts index 5e9b235..a463246 100644 --- a/packages/cypress-plugin/test/integration/src/run-test-case.ts +++ b/packages/cypress-plugin/test/integration/src/run-test-case.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { CreateTestSuiteRunInlineRequest, @@ -36,9 +36,9 @@ import { import cypressPackage from "cypress/package.json"; import semverLt from "semver/functions/lt"; -// Jest times out after 120 seconds, so we bail early here to allow time to print the +// Jest times out after 240 seconds, so we bail early here to allow time to print the // captured output before Jest kills the test. -const TEST_TIMEOUT_MS = 110000; +const TEST_TIMEOUT_MS = 230000; const userAgentRegex = new RegExp( "unflakable-js-api/(?:[-0-9.]|alpha|beta)+ unflakable-cypress-plugin/(?:[-0-9.]|alpha|beta)+ \\(Cypress [0-9]+\\.[0-9]+\\.[0-9]+; Node v[0-9]+\\.[0-9]+\\.[0-9]\\)" diff --git a/packages/cypress-plugin/test/integration/src/test-wrappers.ts b/packages/cypress-plugin/test/integration/src/test-wrappers.ts index 090ecaa..278ccb8 100644 --- a/packages/cypress-plugin/test/integration/src/test-wrappers.ts +++ b/packages/cypress-plugin/test/integration/src/test-wrappers.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { runTestCase, TestCaseParams } from "./run-test-case"; import path from "path"; diff --git a/packages/cypress-plugin/test/integration/src/unicode.test.ts b/packages/cypress-plugin/test/integration/src/unicode.test.ts index a400392..d2bdd3e 100644 --- a/packages/cypress-plugin/test/integration/src/unicode.test.ts +++ b/packages/cypress-plugin/test/integration/src/unicode.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { defaultSummaryTotals, diff --git a/packages/cypress-plugin/test/integration/src/verify-output.ts b/packages/cypress-plugin/test/integration/src/verify-output.ts index 92c79c7..33ebb92 100644 --- a/packages/cypress-plugin/test/integration/src/verify-output.ts +++ b/packages/cypress-plugin/test/integration/src/verify-output.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC // Make sure expected output is present and chalk-formatted correctly. import { @@ -22,11 +22,18 @@ import { import { expect as expectExt } from "@jest/globals"; import escapeStringRegexp from "escape-string-regexp"; import { TestAttemptResult } from "@unflakable/js-api"; +import semverGte from "semver/functions/gte"; +import cypressPackage from "cypress/package.json"; const THROWN_ERROR = "\x1B[0m\x1B[31m Error\x1B[0m\x1B[90m"; const FAIL_SYMBOL = process.platform === "win32" ? "×" : "✖"; const PASS_SYMBOL = process.platform === "win32" ? "√" : "✓"; +// Cypress 13.4 changed the number of retries returned after a retry passes (i.e., when a test is +// flaky). See: +// https://github.com/cypress-io/cypress/blob/5a95541c3c4e48bfc67a54642abc949576fa6f05/packages/driver/patches/mocha%2B7.0.1.dev.patch +const adjustRetriesOnPass = semverGte(cypressPackage.version, "13.4.0"); + const verifySpecOutput = ( params: TestCaseParams, specOutputs: SpecOutput[], @@ -141,7 +148,7 @@ const verifySpecOutputs = ( new RegExp( // eslint-disable-next-line no-control-regex `^ {2}\x1B\\[35m {2}${PASS_SYMBOL}\x1B\\[39m\x1B\\[90m mixed: flake should be quarantined\x1B\\[0m\x1B\\[35m \\[flaky, quarantined]\x1B\\[39m\x1B\\[33m \\(attempt 2 of ${ - expectedRetries + 1 + adjustRetriesOnPass ? 2 : expectedRetries + 1 }\\)\x1B\\[0m\x1B\\[(?:33|90)m \\([0-9]+.+?\\)\x1B\\[0m$` ) ), @@ -169,7 +176,7 @@ const verifySpecOutputs = ( new RegExp( // eslint-disable-next-line no-control-regex `^ {2}\x1B\\[33m {2}${PASS_SYMBOL}\x1B\\[0m\x1B\\[90m mixed: flake should be quarantined\x1B\\[0m\x1B\\[33m \\[flaky]\x1B\\[0m\x1B\\[33m \\(attempt 2 of ${ - expectedRetries + 1 + adjustRetriesOnPass ? 2 : expectedRetries + 1 }\\)\x1B\\[0m\x1B\\[(?:33|90)m \\([0-9]+.+?\\)\x1B\\[0m$` ) ), @@ -208,7 +215,7 @@ const verifySpecOutputs = ( new RegExp( // eslint-disable-next-line no-control-regex `^ {2}\x1B\\[35m {2}${PASS_SYMBOL}\x1B\\[39m\x1B\\[90m mixed: should be flaky\x1B\\[0m\x1B\\[35m \\[flaky, quarantined]\x1B\\[39m\x1B\\[33m \\(attempt 2 of ${ - expectedRetries + 1 + adjustRetriesOnPass ? 2 : expectedRetries + 1 }\\)\x1B\\[0m\x1B\\[(?:33|90)m \\([0-9]+.+?\\)\x1B\\[0m$` ) ) @@ -216,7 +223,7 @@ const verifySpecOutputs = ( new RegExp( // eslint-disable-next-line no-control-regex `^ {2}\x1B\\[33m {2}${PASS_SYMBOL}\x1B\\[0m\x1B\\[90m mixed: should be flaky\x1B\\[0m\x1B\\[33m \\[flaky]\x1B\\[0m\x1B\\[33m \\(attempt 2 of ${ - expectedRetries + 1 + adjustRetriesOnPass ? 2 : expectedRetries + 1 }\\)\x1B\\[0m\x1B\\[(?:33|90)m \\([0-9]+.+?\\)\x1B\\[0m$` ) ), @@ -708,7 +715,7 @@ const verifySpecOutputs = ( `^\x1B\\[35m {2}${PASS_SYMBOL}\x1B\\[39m\x1B\\[90m should be flaky${escapeStringRegexp( expectedFlakeTestNameSuffix )}\x1B\\[0m\x1B\\[35m \\[flaky, quarantined]\x1B\\[39m\x1B\\[33m \\(attempt 2 of ${ - expectedRetries + 1 + adjustRetriesOnPass ? 2 : expectedRetries + 1 }\\)\x1B\\[0m\x1B\\[(?:33|90)m \\([0-9]+.+?\\)\x1B\\[0m$` ) ) @@ -718,7 +725,7 @@ const verifySpecOutputs = ( `^\x1B\\[33m {2}${PASS_SYMBOL}\x1B\\[0m\x1B\\[90m should be flaky${escapeStringRegexp( expectedFlakeTestNameSuffix )}\x1B\\[0m\x1B\\[33m \\[flaky]\x1B\\[0m\x1B\\[33m \\(attempt 2 of ${ - expectedRetries + 1 + adjustRetriesOnPass ? 2 : expectedRetries + 1 }\\)\x1B\\[0m\x1B\\[(?:33|90)m \\([0-9]+.+?\\)\x1B\\[0m$` ) ), diff --git a/packages/cypress-plugin/test/integration/unflakable.js b/packages/cypress-plugin/test/integration/unflakable.js index d24c20f..f29e4fc 100644 --- a/packages/cypress-plugin/test/integration/unflakable.js +++ b/packages/cypress-plugin/test/integration/unflakable.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC module.exports = { __unstableIsFailureTestIndependent: [ @@ -9,11 +9,13 @@ module.exports = { /attempting to close the browser tab(?:(?!resetting server state).)*$/s, /Still waiting to connect to Edge, retrying in 1 second.*(?:Error: Test timed out after|All promises were rejected)/s, /There was an error reconnecting to the Chrome DevTools protocol\. Please restart the browser\./, + /Cypress failed to make a connection to the Chrome DevTools Protocol after retrying/, // When this error occurs, Cypress ends up printing the "Running: " header multiple times, // which the integration test parses as if that spec were in fact invoked multiple times. We // don't want the test itself to ignore multiple spec invocations since that could indicate a // bug. Instead, we treat it as a test independent failure iff this error message is in the // output. Otherwise, we'll still treat it as a true failure. /Timed out waiting for the browser to connect. Retrying\.\.\./, + /Cypress verification timed out\./, ], }; diff --git a/packages/cypress-plugin/tsconfig.json b/packages/cypress-plugin/tsconfig.json index 9e9a7c8..786cbe3 100644 --- a/packages/cypress-plugin/tsconfig.json +++ b/packages/cypress-plugin/tsconfig.json @@ -15,5 +15,5 @@ // Avoids conflicting global definitions from, e.g., jest. "types": ["node"] }, - "include": ["mocha.d.ts", "rollup.config.mjs"] + "include": ["cypress-on-fix.d.ts", "mocha.d.ts", "rollup.config.mjs"] } diff --git a/packages/jest-plugin/.eslintrc.js b/packages/jest-plugin/.eslintrc.js index dcbec19..f943e67 100644 --- a/packages/jest-plugin/.eslintrc.js +++ b/packages/jest-plugin/.eslintrc.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC module.exports = { extends: ["../../.eslintrc-ts.js"], diff --git a/packages/jest-plugin/LICENSE b/packages/jest-plugin/LICENSE index 53bf01b..fc24ed8 100644 --- a/packages/jest-plugin/LICENSE +++ b/packages/jest-plugin/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2022-2023 Developer Innovations, LLC +Copyright (c) 2022-2024 Developer Innovations, LLC Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/jest-plugin/jest-circus.d.ts b/packages/jest-plugin/jest-circus.d.ts index c17e897..833746d 100644 --- a/packages/jest-plugin/jest-circus.d.ts +++ b/packages/jest-plugin/jest-circus.d.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC // jest-circus doesn't export the types for runner. See: // https://github.com/jestjs/jest/blob/6d2632adae0f0fa1fe116d3b475fd9783d0de1b5/packages/jest-circus/runner.js#L10-L9 diff --git a/packages/jest-plugin/jest.config.js b/packages/jest-plugin/jest.config.js index 6318fbd..6cd3940 100644 --- a/packages/jest-plugin/jest.config.js +++ b/packages/jest-plugin/jest.config.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC /** @type {import('ts-jest').JestConfigWithTsJest} */ module.exports = { diff --git a/packages/jest-plugin/rollup.config.mjs b/packages/jest-plugin/rollup.config.mjs index 797cee5..c57bf72 100644 --- a/packages/jest-plugin/rollup.config.mjs +++ b/packages/jest-plugin/rollup.config.mjs @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import path from "path"; import pluginCommonJs from "@rollup/plugin-commonjs"; diff --git a/packages/jest-plugin/src/config.test.ts b/packages/jest-plugin/src/config.test.ts index ece7c1d..b105138 100644 --- a/packages/jest-plugin/src/config.test.ts +++ b/packages/jest-plugin/src/config.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { loadConfig } from "./config"; import { cosmiconfigSync, Options } from "cosmiconfig"; diff --git a/packages/jest-plugin/src/config.ts b/packages/jest-plugin/src/config.ts index b3a87d0..97159dc 100644 --- a/packages/jest-plugin/src/config.ts +++ b/packages/jest-plugin/src/config.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { IsFailureTestIndependentFn, diff --git a/packages/jest-plugin/src/index.ts b/packages/jest-plugin/src/index.ts index 0c72377..be0a8c0 100644 --- a/packages/jest-plugin/src/index.ts +++ b/packages/jest-plugin/src/index.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC import reporter from "./reporter"; import runner from "./runner"; diff --git a/packages/jest-plugin/src/reporter.ts b/packages/jest-plugin/src/reporter.ts index 89e0ae9..6c1fe51 100644 --- a/packages/jest-plugin/src/reporter.ts +++ b/packages/jest-plugin/src/reporter.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC import * as path from "path"; import type { diff --git a/packages/jest-plugin/src/runner.ts b/packages/jest-plugin/src/runner.ts index 7097f01..17dbcda 100644 --- a/packages/jest-plugin/src/runner.ts +++ b/packages/jest-plugin/src/runner.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC import * as path from "path"; import type { SerializableError, TestResult } from "@jest/test-result"; diff --git a/packages/jest-plugin/src/test-runner.ts b/packages/jest-plugin/src/test-runner.ts index 1884aaf..4f50009 100644 --- a/packages/jest-plugin/src/test-runner.ts +++ b/packages/jest-plugin/src/test-runner.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { TestEvents, TestFileEvent, TestResult } from "@jest/test-result"; import { JestEnvironment } from "@jest/environment"; diff --git a/packages/jest-plugin/src/types.ts b/packages/jest-plugin/src/types.ts index 849a5da..3f72bbf 100644 --- a/packages/jest-plugin/src/types.ts +++ b/packages/jest-plugin/src/types.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC import type { AggregatedResult, diff --git a/packages/jest-plugin/src/utils.ts b/packages/jest-plugin/src/utils.ts index 9a4e0b9..2138d0b 100644 --- a/packages/jest-plugin/src/utils.ts +++ b/packages/jest-plugin/src/utils.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC import type { AssertionResult, Status } from "@jest/test-result"; import jestPackage from "jest/package.json"; diff --git a/packages/jest-plugin/src/vendored/SummaryReporter.ts b/packages/jest-plugin/src/vendored/SummaryReporter.ts index 91c9b13..5f54f95 100644 --- a/packages/jest-plugin/src/vendored/SummaryReporter.ts +++ b/packages/jest-plugin/src/vendored/SummaryReporter.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC /* This file includes portions of a Jest source code file originally downloaded from: diff --git a/packages/jest-plugin/src/vendored/getResultHeader.ts b/packages/jest-plugin/src/vendored/getResultHeader.ts index 37f80cf..86cc030 100644 --- a/packages/jest-plugin/src/vendored/getResultHeader.ts +++ b/packages/jest-plugin/src/vendored/getResultHeader.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC import { utils } from "@jest/reporters"; import { TestResult } from "@jest/test-result"; diff --git a/packages/jest-plugin/src/vendored/getSummary.ts b/packages/jest-plugin/src/vendored/getSummary.ts index 8422414..5b88c23 100644 --- a/packages/jest-plugin/src/vendored/getSummary.ts +++ b/packages/jest-plugin/src/vendored/getSummary.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC /* This file includes portions of a Jest source code file originally downloaded from: diff --git a/packages/jest-plugin/test/.eslintrc.js b/packages/jest-plugin/test/.eslintrc.js index 4d0da9e..b7a3a23 100644 --- a/packages/jest-plugin/test/.eslintrc.js +++ b/packages/jest-plugin/test/.eslintrc.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC module.exports = { env: { diff --git a/packages/jest-plugin/test/babel.config.js b/packages/jest-plugin/test/babel.config.js index 67d5947..d3cffba 100644 --- a/packages/jest-plugin/test/babel.config.js +++ b/packages/jest-plugin/test/babel.config.js @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC /* eslint-env node */ diff --git a/packages/jest-plugin/test/integration-input/jest.config.js b/packages/jest-plugin/test/integration-input/jest.config.js index e23590c..75d15b8 100644 --- a/packages/jest-plugin/test/integration-input/jest.config.js +++ b/packages/jest-plugin/test/integration-input/jest.config.js @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC module.exports = { clearMocks: true, diff --git a/packages/jest-plugin/test/integration-input/src/fail.test.ts b/packages/jest-plugin/test/integration-input/src/fail.test.ts index cf69151..7448062 100644 --- a/packages/jest-plugin/test/integration-input/src/fail.test.ts +++ b/packages/jest-plugin/test/integration-input/src/fail.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC describe("describe block", () => { (process.env.SKIP_FAILURES !== undefined ? it.skip : it)( diff --git a/packages/jest-plugin/test/integration-input/src/flake.test.ts b/packages/jest-plugin/test/integration-input/src/flake.test.ts index 6acbbbb..9aaf8f0 100644 --- a/packages/jest-plugin/test/integration-input/src/flake.test.ts +++ b/packages/jest-plugin/test/integration-input/src/flake.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC import fs from "fs/promises"; diff --git a/packages/jest-plugin/test/integration-input/src/invalid.test.ts b/packages/jest-plugin/test/integration-input/src/invalid.test.ts index 626b065..7760c16 100644 --- a/packages/jest-plugin/test/integration-input/src/invalid.test.ts +++ b/packages/jest-plugin/test/integration-input/src/invalid.test.ts @@ -1,3 +1,3 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC throw new Error("invalid test file"); diff --git a/packages/jest-plugin/test/integration-input/src/mixed.test.ts b/packages/jest-plugin/test/integration-input/src/mixed.test.ts index 129635d..05b0bf7 100644 --- a/packages/jest-plugin/test/integration-input/src/mixed.test.ts +++ b/packages/jest-plugin/test/integration-input/src/mixed.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC // This test contains both a failed test and a quarantined one, which the reporter should treat as // a failed test file. However, the quarantined test should still be reported as having been diff --git a/packages/jest-plugin/test/integration-input/src/pass.test.ts b/packages/jest-plugin/test/integration-input/src/pass.test.ts index 8e79dbf..dbd1e58 100644 --- a/packages/jest-plugin/test/integration-input/src/pass.test.ts +++ b/packages/jest-plugin/test/integration-input/src/pass.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC it("should pass", () => { if (process.env.TEST_SNAPSHOTS !== undefined) { diff --git a/packages/jest-plugin/test/integration-input/src/quarantined.test.ts b/packages/jest-plugin/test/integration-input/src/quarantined.test.ts index 397bae1..1b12471 100644 --- a/packages/jest-plugin/test/integration-input/src/quarantined.test.ts +++ b/packages/jest-plugin/test/integration-input/src/quarantined.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC describe("describe block", () => { (process.env.SKIP_QUARANTINED !== undefined ? it.skip : it)( diff --git a/packages/jest-plugin/test/integration/jest.config.js b/packages/jest-plugin/test/integration/jest.config.js index ac2e971..ceb5c34 100644 --- a/packages/jest-plugin/test/integration/jest.config.js +++ b/packages/jest-plugin/test/integration/jest.config.js @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC module.exports = { setupFilesAfterEnv: ["./src/matchers.ts"], diff --git a/packages/jest-plugin/test/integration/package.json b/packages/jest-plugin/test/integration/package.json index c80c811..26d5f5a 100644 --- a/packages/jest-plugin/test/integration/package.json +++ b/packages/jest-plugin/test/integration/package.json @@ -16,7 +16,7 @@ "jest-environment-node": "25.1.0 - 29", "jest-get-type": "25.1.0 - 29", "jest-matcher-utils": "25.1.0 - 29", - "mockttp": "^3.7.5", + "mockttp": "^3.9.2", "semver": "^7.5.4", "tmp": "^0.2.1", "typescript": "^4.9.5", diff --git a/packages/jest-plugin/test/integration/src/basic.test.ts b/packages/jest-plugin/test/integration/src/basic.test.ts index 2f81bec..c9427b3 100644 --- a/packages/jest-plugin/test/integration/src/basic.test.ts +++ b/packages/jest-plugin/test/integration/src/basic.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC import { defaultExpectedResults, diff --git a/packages/jest-plugin/test/integration/src/config.test.ts b/packages/jest-plugin/test/integration/src/config.test.ts index 0f56c1e..59976d0 100644 --- a/packages/jest-plugin/test/integration/src/config.test.ts +++ b/packages/jest-plugin/test/integration/src/config.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC import { defaultExpectedResults, diff --git a/packages/jest-plugin/test/integration/src/disable-plugin.test.ts b/packages/jest-plugin/test/integration/src/disable-plugin.test.ts index 5673309..d70dd1a 100644 --- a/packages/jest-plugin/test/integration/src/disable-plugin.test.ts +++ b/packages/jest-plugin/test/integration/src/disable-plugin.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC import { defaultExpectedResults, diff --git a/packages/jest-plugin/test/integration/src/disable-upload.test.ts b/packages/jest-plugin/test/integration/src/disable-upload.test.ts index 38706c2..59f680f 100644 --- a/packages/jest-plugin/test/integration/src/disable-upload.test.ts +++ b/packages/jest-plugin/test/integration/src/disable-upload.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC import { defaultExpectedResults, diff --git a/packages/jest-plugin/test/integration/src/force-color.js b/packages/jest-plugin/test/integration/src/force-color.js index 9807cd1..0978afe 100644 --- a/packages/jest-plugin/test/integration/src/force-color.js +++ b/packages/jest-plugin/test/integration/src/force-color.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC // Jest changes FORCE_COLOR to 1 when it forks child processes. We execute this script with // `node --require` so that each subprocess has the correct FORCE_COLOR value to produce the color diff --git a/packages/jest-plugin/test/integration/src/git.test.ts b/packages/jest-plugin/test/integration/src/git.test.ts index 0f8487d..62c3d4f 100644 --- a/packages/jest-plugin/test/integration/src/git.test.ts +++ b/packages/jest-plugin/test/integration/src/git.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC import path from "path"; import { diff --git a/packages/jest-plugin/test/integration/src/ignore-failures.test.ts b/packages/jest-plugin/test/integration/src/ignore-failures.test.ts index e2e68c4..e8263b7 100644 --- a/packages/jest-plugin/test/integration/src/ignore-failures.test.ts +++ b/packages/jest-plugin/test/integration/src/ignore-failures.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC import { defaultExpectedResults, diff --git a/packages/jest-plugin/test/integration/src/long-names.test.ts b/packages/jest-plugin/test/integration/src/long-names.test.ts index 27aa9d8..8284f15 100644 --- a/packages/jest-plugin/test/integration/src/long-names.test.ts +++ b/packages/jest-plugin/test/integration/src/long-names.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC import { defaultExpectedResults, diff --git a/packages/jest-plugin/test/integration/src/matchers.ts b/packages/jest-plugin/test/integration/src/matchers.ts index 6919967..be025b9 100644 --- a/packages/jest-plugin/test/integration/src/matchers.ts +++ b/packages/jest-plugin/test/integration/src/matchers.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { MatcherHintOptions, diff --git a/packages/jest-plugin/test/integration/src/no-quarantine.test.ts b/packages/jest-plugin/test/integration/src/no-quarantine.test.ts index 97e735f..4d909b6 100644 --- a/packages/jest-plugin/test/integration/src/no-quarantine.test.ts +++ b/packages/jest-plugin/test/integration/src/no-quarantine.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC import { integrationTest, integrationTestSuite } from "./test-wrappers"; diff --git a/packages/jest-plugin/test/integration/src/plugin-failures.test.ts b/packages/jest-plugin/test/integration/src/plugin-failures.test.ts index af57524..07ec795 100644 --- a/packages/jest-plugin/test/integration/src/plugin-failures.test.ts +++ b/packages/jest-plugin/test/integration/src/plugin-failures.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC import { defaultExpectedResults, diff --git a/packages/jest-plugin/test/integration/src/retries.test.ts b/packages/jest-plugin/test/integration/src/retries.test.ts index 95f57e9..972ca92 100644 --- a/packages/jest-plugin/test/integration/src/retries.test.ts +++ b/packages/jest-plugin/test/integration/src/retries.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC import { defaultExpectedResults, diff --git a/packages/jest-plugin/test/integration/src/run-test-case.ts b/packages/jest-plugin/test/integration/src/run-test-case.ts index fa869f3..d27fd17 100644 --- a/packages/jest-plugin/test/integration/src/run-test-case.ts +++ b/packages/jest-plugin/test/integration/src/run-test-case.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC import { tmpName, TmpNameOptions } from "tmp"; import { diff --git a/packages/jest-plugin/test/integration/src/skip-tests.test.ts b/packages/jest-plugin/test/integration/src/skip-tests.test.ts index b122fbf..6586044 100644 --- a/packages/jest-plugin/test/integration/src/skip-tests.test.ts +++ b/packages/jest-plugin/test/integration/src/skip-tests.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC import { integrationTest, integrationTestSuite } from "./test-wrappers"; diff --git a/packages/jest-plugin/test/integration/src/snapshots.test.ts b/packages/jest-plugin/test/integration/src/snapshots.test.ts index 7c4948c..afb9383 100644 --- a/packages/jest-plugin/test/integration/src/snapshots.test.ts +++ b/packages/jest-plugin/test/integration/src/snapshots.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC import { defaultExpectedResults, diff --git a/packages/jest-plugin/test/integration/src/test-independence.test.ts b/packages/jest-plugin/test/integration/src/test-independence.test.ts index 9905c71..e60ef6f 100644 --- a/packages/jest-plugin/test/integration/src/test-independence.test.ts +++ b/packages/jest-plugin/test/integration/src/test-independence.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import jestPackage from "jest/package.json"; import { diff --git a/packages/jest-plugin/test/integration/src/test-name-pattern.test.ts b/packages/jest-plugin/test/integration/src/test-name-pattern.test.ts index a1d6a7a..a7786ad 100644 --- a/packages/jest-plugin/test/integration/src/test-name-pattern.test.ts +++ b/packages/jest-plugin/test/integration/src/test-name-pattern.test.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC import { defaultExpectedResults, diff --git a/packages/jest-plugin/test/integration/src/test-wrappers.ts b/packages/jest-plugin/test/integration/src/test-wrappers.ts index 70c53f7..7cae8b6 100644 --- a/packages/jest-plugin/test/integration/src/test-wrappers.ts +++ b/packages/jest-plugin/test/integration/src/test-wrappers.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import jestPackage from "jest/package.json"; import path from "path"; diff --git a/packages/jest-plugin/test/integration/src/verify-output.ts b/packages/jest-plugin/test/integration/src/verify-output.ts index d0029de..7fee318 100644 --- a/packages/jest-plugin/test/integration/src/verify-output.ts +++ b/packages/jest-plugin/test/integration/src/verify-output.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC // These are the chalk-formatted strings that include console color codes. import escapeStringRegexp from "escape-string-regexp"; diff --git a/packages/jest-plugin/window.d.ts b/packages/jest-plugin/window.d.ts index acaa11a..e0f548f 100644 --- a/packages/jest-plugin/window.d.ts +++ b/packages/jest-plugin/window.d.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC export {}; diff --git a/packages/js-api/.eslintrc.js b/packages/js-api/.eslintrc.js index 02409c8..ff96017 100644 --- a/packages/js-api/.eslintrc.js +++ b/packages/js-api/.eslintrc.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC module.exports = { extends: ["../../.eslintrc-ts.js"], diff --git a/packages/js-api/LICENSE b/packages/js-api/LICENSE index 53bf01b..fc24ed8 100644 --- a/packages/js-api/LICENSE +++ b/packages/js-api/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2022-2023 Developer Innovations, LLC +Copyright (c) 2022-2024 Developer Innovations, LLC Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/js-api/src/consts.ts b/packages/js-api/src/consts.ts index cf19eab..8823e7f 100644 --- a/packages/js-api/src/consts.ts +++ b/packages/js-api/src/consts.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC export const JS_API_VERSION: string = // eslint-disable-next-line @typescript-eslint/no-var-requires diff --git a/packages/js-api/src/index.ts b/packages/js-api/src/index.ts index b2cc254..5ff206e 100644 --- a/packages/js-api/src/index.ts +++ b/packages/js-api/src/index.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC import nodeFetch, { RequestInit, Response } from "node-fetch"; import _debug = require("debug"); diff --git a/packages/plugins-common/.eslintrc.js b/packages/plugins-common/.eslintrc.js index 02409c8..ff96017 100644 --- a/packages/plugins-common/.eslintrc.js +++ b/packages/plugins-common/.eslintrc.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC module.exports = { extends: ["../../.eslintrc-ts.js"], diff --git a/packages/plugins-common/src/config.ts b/packages/plugins-common/src/config.ts index d277fdd..23c171f 100644 --- a/packages/plugins-common/src/config.ts +++ b/packages/plugins-common/src/config.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { CosmiconfigResult } from "cosmiconfig/dist/types"; import { cosmiconfig, cosmiconfigSync } from "cosmiconfig"; diff --git a/packages/plugins-common/src/env.ts b/packages/plugins-common/src/env.ts index 8ac5d40..a89b628 100644 --- a/packages/plugins-common/src/env.ts +++ b/packages/plugins-common/src/env.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import process from "process"; diff --git a/packages/plugins-common/src/git.ts b/packages/plugins-common/src/git.ts index d5d94cf..e2907f7 100644 --- a/packages/plugins-common/src/git.ts +++ b/packages/plugins-common/src/git.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC import _debug from "debug"; import { simpleGit, SimpleGit, SimpleGitFactory } from "simple-git"; diff --git a/packages/plugins-common/src/index.ts b/packages/plugins-common/src/index.ts index ee6fa9e..5e9e953 100644 --- a/packages/plugins-common/src/index.ts +++ b/packages/plugins-common/src/index.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import path from "path"; diff --git a/packages/plugins-common/src/manifest.ts b/packages/plugins-common/src/manifest.ts index e4799f1..c552b0c 100644 --- a/packages/plugins-common/src/manifest.ts +++ b/packages/plugins-common/src/manifest.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import _debug from "debug"; import { diff --git a/packages/plugins-common/src/quarantine.ts b/packages/plugins-common/src/quarantine.ts index 70cd1b6..e8c83fb 100644 --- a/packages/plugins-common/src/quarantine.ts +++ b/packages/plugins-common/src/quarantine.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC // Avoid depending on the core of the js-api, which includes a bunch of Node dependencies. We need // this module to work in the browser for the Cypress plugin's skip-tests module. diff --git a/packages/test-common/.eslintrc.js b/packages/test-common/.eslintrc.js index 02409c8..ff96017 100644 --- a/packages/test-common/.eslintrc.js +++ b/packages/test-common/.eslintrc.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC module.exports = { extends: ["../../.eslintrc-ts.js"], diff --git a/packages/test-common/package.json b/packages/test-common/package.json index f1b4508..548d460 100644 --- a/packages/test-common/package.json +++ b/packages/test-common/package.json @@ -6,7 +6,7 @@ "debug": "^4.3.3", "deep-equal": "^2.0.5", "expect": "25.1.0 - 29", - "mockttp": "^3.7.5", + "mockttp": "^3.9.2", "simple-git": "^3.16.0", "tree-kill": "^1.2.2" }, diff --git a/packages/test-common/rollup.config.mjs b/packages/test-common/rollup.config.mjs index 0e63ae9..9ad0ca1 100644 --- a/packages/test-common/rollup.config.mjs +++ b/packages/test-common/rollup.config.mjs @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import path from "path"; import pluginCommonJs from "@rollup/plugin-commonjs"; diff --git a/packages/test-common/src/config.ts b/packages/test-common/src/config.ts index c39d9a6..c9492da 100644 --- a/packages/test-common/src/config.ts +++ b/packages/test-common/src/config.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import _debug from "debug"; import { diff --git a/packages/test-common/src/git.ts b/packages/test-common/src/git.ts index bbbadd7..4ae081d 100644 --- a/packages/test-common/src/git.ts +++ b/packages/test-common/src/git.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import _debug from "debug"; import { setSimpleGitFactory } from "@unflakable/plugins-common"; diff --git a/packages/test-common/src/mock-backend.ts b/packages/test-common/src/mock-backend.ts index 2479a87..70dcb0a 100644 --- a/packages/test-common/src/mock-backend.ts +++ b/packages/test-common/src/mock-backend.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { CompletedRequest, diff --git a/packages/test-common/src/mock-cosmiconfig.ts b/packages/test-common/src/mock-cosmiconfig.ts index 1f6936e..90049d3 100644 --- a/packages/test-common/src/mock-cosmiconfig.ts +++ b/packages/test-common/src/mock-cosmiconfig.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC // Script loaded by Node.JS via --require that mocks cosmiconfig for testing. diff --git a/packages/test-common/src/mock-git.ts b/packages/test-common/src/mock-git.ts index fc84fea..477ac4e 100644 --- a/packages/test-common/src/mock-git.ts +++ b/packages/test-common/src/mock-git.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC // Script loaded by Node.JS via --require that mocks simple-git for testing. diff --git a/packages/test-common/src/spawn.ts b/packages/test-common/src/spawn.ts index 099042c..9143bcf 100644 --- a/packages/test-common/src/spawn.ts +++ b/packages/test-common/src/spawn.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC import { TextDecoder } from "util"; import treeKill from "tree-kill"; diff --git a/scripts/.eslintrc.js b/scripts/.eslintrc.js index 653facc..34454d6 100644 --- a/scripts/.eslintrc.js +++ b/scripts/.eslintrc.js @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Developer Innovations, LLC +// Copyright (c) 2023-2024 Developer Innovations, LLC module.exports = { extends: ["../.eslintrc-ts.js"], diff --git a/scripts/set-jest-version.ts b/scripts/set-jest-version.ts index b12f92b..66037ca 100644 --- a/scripts/set-jest-version.ts +++ b/scripts/set-jest-version.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Developer Innovations, LLC +// Copyright (c) 2022-2024 Developer Innovations, LLC import { execSync, spawnSync } from "child_process"; import * as fs from "fs"; @@ -77,6 +77,7 @@ const PACKAGE_VERSION_MAP = { "25 - 27": null, "29.0 - 29.3": "~29.0", "29.4 - 29.5": "~29.4", + "29.6 - 29.7": "~29.6", }, "@jest/source-map": { "25.2 - 25.4": "~25.2", @@ -86,6 +87,7 @@ const PACKAGE_VERSION_MAP = { "29.0 - 29.1": "~29.0", "29.2 - 29.3": "~29.2", "29.4 - 29.5": "~29.4", + "29.6 - 29.7": "~29.6", }, "@jest/test-result": { "26.3 - 26.4": "~26.3", @@ -96,6 +98,7 @@ const PACKAGE_VERSION_MAP = { "@jest/types": { "26.3 - 26.4": "~26.3", "27.2 - 27.3": "~27.2", + "29.6 - 29.7": "~29.6", }, "babel-jest": { "26.3 - 26.4": "~26.3", @@ -107,7 +110,7 @@ const PACKAGE_VERSION_MAP = { "27.2 - 27.3": "~27.2", "29.0 - 29.1": "~29.0", "29.2 - 29.3": "~29.2", - "29.5 - 29.6": "~29.5", + "29.6 - 29.7": "~29.6", }, "babel-preset-jest": { "26.3 - 26.4": "~26.3", @@ -115,7 +118,7 @@ const PACKAGE_VERSION_MAP = { "27.2 - 27.3": "~27.2", "29.0 - 29.1": "~29.0", "29.2 - 29.3": "~29.2", - "29.5 - 29.6": "~29.5", + "29.6 - 29.7": "~29.6", }, "jest-changed-files": { "26.3 - 26.4": "~26.3", @@ -145,7 +148,8 @@ const PACKAGE_VERSION_MAP = { "^28": "~28.0", "29.0 - 29.1": "~29.0", "29.2 - 29.3": "~29.2", - "29.4 - 29.6": "~29.4", + "29.4 - 29.5": "~29.4", + "29.6 - 29.7": "~29.6", }, "jest-haste-map": { "26.3 - 26.4": "~26.3", @@ -163,7 +167,8 @@ const PACKAGE_VERSION_MAP = { "^28": "~28.0", "29.0 - 29.1": "~29.0", "29.2 - 29.3": "~29.2", - "29.4 - 29.6": "~29.4", + "29.4 - 29.5": "~29.4", + "29.6 - 29.7": "~29.6", }, "jest-serializer": { "25.2 - 25.4": "~25.2", diff --git a/yarn.lock b/yarn.lock index d805a5d..5eb8cd1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1408,8 +1408,8 @@ __metadata: linkType: hard "@cypress/request@npm:^2.88.10": - version: 2.88.11 - resolution: "@cypress/request@npm:2.88.11" + version: 2.88.12 + resolution: "@cypress/request@npm:2.88.12" dependencies: aws-sign2: ~0.7.0 aws4: ^1.8.0 @@ -1426,10 +1426,10 @@ __metadata: performance-now: ^2.1.0 qs: ~6.10.3 safe-buffer: ^5.1.2 - tough-cookie: ~2.5.0 + tough-cookie: ^4.1.3 tunnel-agent: ^0.6.0 uuid: ^8.3.2 - checksum: e4b3f62e0c41c4ccca6c942828461d8ea717e752fd918d685e9f74e2ebcfa8b7942427f7ce971e502635c3bf3d40011476db84dc753d3dc360c6d08350da6f93 + checksum: 2c6fbf7f3127d41bffca8374beaa8cf95450495a8a077b00309ea9d94dd2a4da450a77fe038e8ad26c97cdd7c39b65c53c850f8338ce9bc2dbe23ce2e2b48329 languageName: node linkType: hard @@ -2653,13 +2653,6 @@ __metadata: languageName: node linkType: hard -"@tootallnate/once@npm:1": - version: 1.1.2 - resolution: "@tootallnate/once@npm:1.1.2" - checksum: e1fb1bbbc12089a0cb9433dc290f97bddd062deadb6178ce9bcb93bb7c1aecde5e60184bc7065aec42fe1663622a213493c48bbd4972d931aae48315f18e1be9 - languageName: node - linkType: hard - "@tootallnate/once@npm:2": version: 2.0.0 resolution: "@tootallnate/once@npm:2.0.0" @@ -2667,6 +2660,13 @@ __metadata: languageName: node linkType: hard +"@tootallnate/quickjs-emscripten@npm:^0.23.0": + version: 0.23.0 + resolution: "@tootallnate/quickjs-emscripten@npm:0.23.0" + checksum: c350a2947ffb80b22e14ff35099fd582d1340d65723384a0fd0515e905e2534459ad2f301a43279a37308a27c99273c932e64649abd57d0bb3ca8c557150eccc + languageName: node + linkType: hard + "@tsconfig/node10@npm:^1.0.7": version: 1.0.8 resolution: "@tsconfig/node10@npm:1.0.8" @@ -3218,6 +3218,7 @@ __metadata: cross-env: ^7.0.3 cypress: 11.2 - 13 cypress-multi-reporters: ^1.6.3 + cypress-on-fix: ^1.0.2 dayjs: ^1.10.4 debug: ^4.3.3 deep-equal: ^2.0.5 @@ -3511,14 +3512,14 @@ __metadata: languageName: node linkType: hard -"acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.2.0": +"acorn-walk@npm:^8.1.1": version: 8.2.0 resolution: "acorn-walk@npm:8.2.0" checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 languageName: node linkType: hard -"acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.7.0, acorn@npm:^8.7.1, acorn@npm:^8.8.0": +"acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.7.1, acorn@npm:^8.8.0": version: 8.8.2 resolution: "acorn@npm:8.8.2" bin: @@ -3536,6 +3537,15 @@ __metadata: languageName: node linkType: hard +"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0": + version: 7.1.0 + resolution: "agent-base@npm:7.1.0" + dependencies: + debug: ^4.3.4 + checksum: f7828f991470a0cc22cb579c86a18cbae83d8a3cbed39992ab34fc7217c4d126017f1c74d0ab66be87f71455318a8ea3e757d6a37881b8d0f2a2c6aa55e5418f + languageName: node + linkType: hard + "agentkeepalive@npm:^4.2.1": version: 4.2.1 resolution: "agentkeepalive@npm:4.2.1" @@ -3808,7 +3818,7 @@ __metadata: languageName: node linkType: hard -"ast-types@npm:^0.13.2": +"ast-types@npm:^0.13.4": version: 0.13.4 resolution: "ast-types@npm:0.13.4" dependencies: @@ -4024,6 +4034,13 @@ __metadata: languageName: node linkType: hard +"basic-ftp@npm:^5.0.2": + version: 5.0.3 + resolution: "basic-ftp@npm:5.0.3" + checksum: 8b04e88eb85a64de9311721bb0707c9cd70453eefdd854cab85438e6f46fb6c597ddad57ed1acf0a9ede3c677b14e657f51051688a5f23d6f3ea7b5d9073b850 + languageName: node + linkType: hard + "bcrypt-pbkdf@npm:^1.0.0": version: 1.0.2 resolution: "bcrypt-pbkdf@npm:1.0.2" @@ -4773,6 +4790,7 @@ __metadata: "@unflakable/cypress-plugin": "workspace:^" cypress: 11.2 - 13 cypress-multi-reporters: ^1.6.3 + cypress-on-fix: ^1.0.2 mocha: =7.0.1 mocha-junit-reporter: ^2.2.0 process: ^0.11.10 @@ -4820,7 +4838,7 @@ __metadata: jest: ^29.5.0 jest-environment-node: ^29.5.0 jest-expect-message: ^1.1.3 - mockttp: ^3.7.5 + mockttp: ^3.9.2 semver: ^7.5.4 ts-jest: ^29.1.0 typescript: ^4.9.5 @@ -4840,6 +4858,13 @@ __metadata: languageName: node linkType: hard +"cypress-on-fix@npm:^1.0.2": + version: 1.0.2 + resolution: "cypress-on-fix@npm:1.0.2" + checksum: b35e0d49e4270237e7cbe95c21d458772d3df6bbb4423346c70f9417e61fdf061ad1d83aca76a854a378d001a68f50c17b8dd312fbe9c50b5d12e61fc317a785 + languageName: node + linkType: hard + "cypress@npm:11.2 - 13": version: 12.14.0 resolution: "cypress@npm:12.14.0" @@ -4901,10 +4926,10 @@ __metadata: languageName: node linkType: hard -"data-uri-to-buffer@npm:3": - version: 3.0.1 - resolution: "data-uri-to-buffer@npm:3.0.1" - checksum: c59c3009686a78c071806b72f4810856ec28222f0f4e252aa495ec027ed9732298ceea99c50328cf59b151dd34cbc3ad6150bbb43e41fc56fa19f48c99e9fc30 +"data-uri-to-buffer@npm:^5.0.1": + version: 5.0.1 + resolution: "data-uri-to-buffer@npm:5.0.1" + checksum: 10958f89c0047b84bd86d572b6b77c9bf238ebe7b55a9a9ab04c90fbf5ab1881783b72e31dc0febdffd30ec914930244f2f728e3629bb8911d922baba129426f languageName: node linkType: hard @@ -4991,7 +5016,7 @@ __metadata: languageName: node linkType: hard -"deep-is@npm:^0.1.3, deep-is@npm:~0.1.3": +"deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 @@ -5022,15 +5047,14 @@ __metadata: languageName: node linkType: hard -"degenerator@npm:^3.0.2": - version: 3.0.4 - resolution: "degenerator@npm:3.0.4" +"degenerator@npm:^5.0.0": + version: 5.0.1 + resolution: "degenerator@npm:5.0.1" dependencies: - ast-types: ^0.13.2 - escodegen: ^1.8.1 - esprima: ^4.0.0 - vm2: ^3.9.17 - checksum: 99c27c9456095e32c4f6e01091d2b5c249f246b574487c52bca571e1e586b02d4b74a0ea7f22f30cc953c914383d02e2038d7d476a22f2704a8c1e88b671007d + ast-types: ^0.13.4 + escodegen: ^2.1.0 + esprima: ^4.0.1 + checksum: a64fa39cdf6c2edd75188157d32338ee9de7193d7dbb2aeb4acb1eb30fa4a15ed80ba8dae9bd4d7b085472cf174a5baf81adb761aaa8e326771392c922084152 languageName: node linkType: hard @@ -5416,14 +5440,13 @@ __metadata: languageName: node linkType: hard -"escodegen@npm:^1.8.1": - version: 1.14.3 - resolution: "escodegen@npm:1.14.3" +"escodegen@npm:^2.1.0": + version: 2.1.0 + resolution: "escodegen@npm:2.1.0" dependencies: esprima: ^4.0.1 - estraverse: ^4.2.0 + estraverse: ^5.2.0 esutils: ^2.0.2 - optionator: ^0.8.1 source-map: ~0.6.1 dependenciesMeta: source-map: @@ -5431,7 +5454,7 @@ __metadata: bin: escodegen: bin/escodegen.js esgenerate: bin/esgenerate.js - checksum: 381cdc4767ecdb221206bbbab021b467bbc2a6f5c9a99c9e6353040080bdd3dfe73d7604ad89a47aca6ea7d58bc635f6bd3fbc8da9a1998e9ddfa8372362ccd0 + checksum: 096696407e161305cd05aebb95134ad176708bc5cb13d0dcc89a5fcbb959b8ed757e7f2591a5f8036f8f4952d4a724de0df14cd419e29212729fa6df5ce16bf6 languageName: node linkType: hard @@ -5646,7 +5669,7 @@ __metadata: languageName: node linkType: hard -"estraverse@npm:^4.1.1, estraverse@npm:^4.2.0": +"estraverse@npm:^4.1.1": version: 4.3.0 resolution: "estraverse@npm:4.3.0" checksum: a6299491f9940bb246124a8d44b7b7a413a8336f5436f9837aaa9330209bd9ee8af7e91a654a3545aee9c54b3308e78ee360cef1d777d37cfef77d2fa33b5827 @@ -5883,7 +5906,7 @@ __metadata: languageName: node linkType: hard -"fast-levenshtein@npm:^2.0.6, fast-levenshtein@npm:~2.0.6": +"fast-levenshtein@npm:^2.0.6": version: 2.0.6 resolution: "fast-levenshtein@npm:2.0.6" checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c @@ -5935,13 +5958,6 @@ __metadata: languageName: node linkType: hard -"file-uri-to-path@npm:2": - version: 2.0.0 - resolution: "file-uri-to-path@npm:2.0.0" - checksum: 4a71a99ddaa6ae7ae7bffe2948c34da59982ed465d930a0af9cb59fcc10fcd93366cc356ec3337c18373fde5df7ac52afda4558f155febd1799d135552207edb - languageName: node - linkType: hard - "fill-range@npm:^7.0.1": version: 7.0.1 resolution: "fill-range@npm:7.0.1" @@ -6020,14 +6036,12 @@ __metadata: languageName: node linkType: hard -"flat@npm:^4.1.0": - version: 4.1.1 - resolution: "flat@npm:4.1.1" - dependencies: - is-buffer: ~2.0.3 +"flat@npm:^5.0.2": + version: 5.0.2 + resolution: "flat@npm:5.0.2" bin: flat: cli.js - checksum: 398be12185eb0f3c59797c3670a8c35d07020b673363175676afbaf53d6b213660e060488554cf82c25504986e1a6059bdbcc5d562e87ca3e972e8a33148e3ae + checksum: 12a1536ac746db74881316a181499a78ef953632ddd28050b7a3a43c62ef5462e3357c8c29d76072bb635f147f7a9a1f0c02efef6b4be28f8db62ceb3d5c7f5d languageName: node linkType: hard @@ -6177,16 +6191,6 @@ __metadata: languageName: node linkType: hard -"ftp@npm:^0.3.10": - version: 0.3.10 - resolution: "ftp@npm:0.3.10" - dependencies: - readable-stream: 1.1.x - xregexp: 2.0.0 - checksum: ddd313c1d44eb7429f3a7d77a0155dc8fe86a4c64dca58f395632333ce4b4e74c61413c6e0ef66ea3f3d32d905952fbb6d028c7117d522f793eb1fa282e17357 - languageName: node - linkType: hard - "function-bind@npm:^1.1.1": version: 1.1.1 resolution: "function-bind@npm:1.1.1" @@ -6295,17 +6299,15 @@ __metadata: languageName: node linkType: hard -"get-uri@npm:3": - version: 3.0.2 - resolution: "get-uri@npm:3.0.2" +"get-uri@npm:^6.0.1": + version: 6.0.1 + resolution: "get-uri@npm:6.0.1" dependencies: - "@tootallnate/once": 1 - data-uri-to-buffer: 3 - debug: 4 - file-uri-to-path: 2 + basic-ftp: ^5.0.2 + data-uri-to-buffer: ^5.0.1 + debug: ^4.3.4 fs-extra: ^8.1.0 - ftp: ^0.3.10 - checksum: 5325b2906b08ca37529ca421cf52bc50376e75c6a945e0a8064e3f76b4bb67b8ab1e316a2fc7a307c8c606ab36d030720f39a57c97b027ff1134335e12102946 + checksum: a8aec70e1c67386fbe67f66e344ecd671a19f4cfc8e0f0e14d070563af5123d540e77fbceb6e26566f29846fac864d2862699ab134d307f85c85e7d72ce23d14 languageName: node linkType: hard @@ -6671,17 +6673,6 @@ __metadata: languageName: node linkType: hard -"http-proxy-agent@npm:^4.0.1": - version: 4.0.1 - resolution: "http-proxy-agent@npm:4.0.1" - dependencies: - "@tootallnate/once": 1 - agent-base: 6 - debug: 4 - checksum: c6a5da5a1929416b6bbdf77b1aca13888013fe7eb9d59fc292e25d18e041bb154a8dfada58e223fc7b76b9b2d155a87e92e608235201f77d34aa258707963a82 - languageName: node - linkType: hard - "http-proxy-agent@npm:^5.0.0": version: 5.0.0 resolution: "http-proxy-agent@npm:5.0.0" @@ -6693,6 +6684,16 @@ __metadata: languageName: node linkType: hard +"http-proxy-agent@npm:^7.0.0": + version: 7.0.0 + resolution: "http-proxy-agent@npm:7.0.0" + dependencies: + agent-base: ^7.1.0 + debug: ^4.3.4 + checksum: 48d4fac997917e15f45094852b63b62a46d0c8a4f0b9c6c23ca26d27b8df8d178bed88389e604745e748bd9a01f5023e25093722777f0593c3f052009ff438b6 + languageName: node + linkType: hard + "http-signature@npm:~1.3.6": version: 1.3.6 resolution: "http-signature@npm:1.3.6" @@ -6714,7 +6715,7 @@ __metadata: languageName: node linkType: hard -"https-proxy-agent@npm:5, https-proxy-agent@npm:^5.0.0, https-proxy-agent@npm:^5.0.1": +"https-proxy-agent@npm:^5.0.0, https-proxy-agent@npm:^5.0.1": version: 5.0.1 resolution: "https-proxy-agent@npm:5.0.1" dependencies: @@ -6724,6 +6725,16 @@ __metadata: languageName: node linkType: hard +"https-proxy-agent@npm:^7.0.2": + version: 7.0.2 + resolution: "https-proxy-agent@npm:7.0.2" + dependencies: + agent-base: ^7.0.2 + debug: 4 + checksum: 088969a0dd476ea7a0ed0a2cf1283013682b08f874c3bc6696c83fa061d2c157d29ef0ad3eb70a2046010bb7665573b2388d10fdcb3e410a66995e5248444292 + languageName: node + linkType: hard + "human-signals@npm:^1.1.1": version: 1.1.1 resolution: "human-signals@npm:1.1.1" @@ -6832,7 +6843,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:~2.0.1, inherits@npm:~2.0.3": +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 @@ -6857,10 +6868,10 @@ __metadata: languageName: node linkType: hard -"ip@npm:^1.1.5": - version: 1.1.5 - resolution: "ip@npm:1.1.5" - checksum: 30133981f082a060a32644f6a7746e9ba7ac9e2bc07ecc8bbdda3ee8ca9bec1190724c390e45a1ee7695e7edfd2a8f7dda2c104ec5f7ac5068c00648504c7e5a +"ip@npm:^1.1.8": + version: 1.1.8 + resolution: "ip@npm:1.1.8" + checksum: a2ade53eb339fb0cbe9e69a44caab10d6e3784662285eb5d2677117ee4facc33a64679051c35e0dfdb1a3983a51ce2f5d2cb36446d52e10d01881789b76e28fb languageName: node linkType: hard @@ -6941,13 +6952,6 @@ __metadata: languageName: node linkType: hard -"is-buffer@npm:~2.0.3": - version: 2.0.5 - resolution: "is-buffer@npm:2.0.5" - checksum: 764c9ad8b523a9f5a32af29bdf772b08eb48c04d2ad0a7240916ac2688c983bf5f8504bf25b35e66240edeb9d9085461f9b5dae1f3d2861c6b06a65fe983de42 - languageName: node - linkType: hard - "is-builtin-module@npm:^3.2.1": version: 3.2.1 resolution: "is-builtin-module@npm:3.2.1" @@ -7100,6 +7104,13 @@ __metadata: languageName: node linkType: hard +"is-plain-obj@npm:^1.1.0": + version: 1.1.0 + resolution: "is-plain-obj@npm:1.1.0" + checksum: 0ee04807797aad50859652a7467481816cbb57e5cc97d813a7dcd8915da8195dc68c436010bf39d195226cde6a2d352f4b815f16f26b7bf486a5754290629931 + languageName: node + linkType: hard + "is-reference@npm:1.2.1": version: 1.2.1 resolution: "is-reference@npm:1.2.1" @@ -7222,13 +7233,6 @@ __metadata: languageName: node linkType: hard -"isarray@npm:0.0.1": - version: 0.0.1 - resolution: "isarray@npm:0.0.1" - checksum: 49191f1425681df4a18c2f0f93db3adb85573bcdd6a4482539d98eac9e705d8961317b01175627e860516a2fc45f8f9302db26e5a380a97a520e272e2a40a8d4 - languageName: node - linkType: hard - "isarray@npm:^2.0.5": version: 2.0.5 resolution: "isarray@npm:2.0.5" @@ -7557,7 +7561,7 @@ __metadata: jest-environment-node: 25.1.0 - 29 jest-get-type: 25.1.0 - 29 jest-matcher-utils: 25.1.0 - 29 - mockttp: ^3.7.5 + mockttp: ^3.9.2 semver: ^7.5.4 tmp: ^0.2.1 typescript: ^4.9.5 @@ -8034,16 +8038,6 @@ __metadata: languageName: node linkType: hard -"levn@npm:~0.3.0": - version: 0.3.0 - resolution: "levn@npm:0.3.0" - dependencies: - prelude-ls: ~1.1.2 - type-check: ~0.3.2 - checksum: 0d084a524231a8246bb10fec48cdbb35282099f6954838604f3c7fc66f2e16fa66fd9cc2f3f20a541a113c4dafdf181e822c887c8a319c9195444e6c64ac395e - languageName: node - linkType: hard - "lines-and-columns@npm:^1.1.6": version: 1.2.4 resolution: "lines-and-columns@npm:1.2.4" @@ -8135,7 +8129,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.16.4, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.21": +"lodash@npm:^4.16.4, lodash@npm:^4.17.14, lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 @@ -8372,11 +8366,11 @@ __metadata: linkType: hard "minimatch@npm:3.0.4": - version: 3.0.4 - resolution: "minimatch@npm:3.0.4" + version: 3.0.8 + resolution: "minimatch@npm:3.0.8" dependencies: brace-expansion: ^1.1.7 - checksum: 66ac295f8a7b59788000ea3749938b0970344c841750abd96694f80269b926ebcafad3deeb3f1da2522978b119e6ae3a5869b63b13a7859a456b3408bd18a078 + checksum: 850cca179cad715133132693e6963b0db64ab0988c4d211415b087fc23a3e46321e2c5376a01bf5623d8782aba8bdf43c571e2e902e51fdce7175c7215c29f8b languageName: node linkType: hard @@ -8407,13 +8401,6 @@ __metadata: languageName: node linkType: hard -"minimist@npm:0.0.8": - version: 0.0.8 - resolution: "minimist@npm:0.0.8" - checksum: 042f8b626b1fa44dffc23bac55771425ac4ee9d267b56f9064c07713e516e1799f3ba933bb628d2475a210caf7dcdb98161611baa1f0daf49309a944cb4bc48f - languageName: node - linkType: hard - "minimist@npm:^1.2.0, minimist@npm:^1.2.6, minimist@npm:^1.2.8": version: 1.2.8 resolution: "minimist@npm:1.2.8" @@ -8498,18 +8485,7 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:0.5.1": - version: 0.5.1 - resolution: "mkdirp@npm:0.5.1" - dependencies: - minimist: 0.0.8 - bin: - mkdirp: bin/cmd.js - checksum: ed1ab49bb1d06c88dba7cfe930a3186f2605b5465aab7c8f24119baaba6e38f9ab4ac1695c68f476c65a48df2a69a8495049cd6e26c360ea082151a0771343d2 - languageName: node - linkType: hard - -"mkdirp@npm:^0.5.5": +"mkdirp@npm:0.5.1, mkdirp@npm:^0.5.5": version: 0.5.6 resolution: "mkdirp@npm:0.5.6" dependencies: @@ -8579,9 +8555,9 @@ __metadata: languageName: node linkType: hard -"mockttp@npm:^3.7.5": - version: 3.7.5 - resolution: "mockttp@npm:3.7.5" +"mockttp@npm:^3.9.2": + version: 3.9.2 + resolution: "mockttp@npm:3.9.2" dependencies: "@graphql-tools/schema": ^8.5.0 "@graphql-tools/utils": ^8.8.0 @@ -8612,19 +8588,19 @@ __metadata: lru-cache: ^7.14.0 native-duplexpair: ^1.0.0 node-forge: ^1.2.1 - pac-proxy-agent: ^5.0.0 + pac-proxy-agent: ^7.0.0 parse-multipart-data: ^1.4.0 performance-now: ^2.1.0 portfinder: 1.0.28 read-tls-client-hello: ^1.0.0 - semver: ^5.7.1 + semver: ^7.5.3 socks-proxy-agent: ^7.0.0 typed-error: ^3.0.2 uuid: ^8.3.2 ws: ^8.8.0 bin: mockttp: dist/admin/admin-bin.js - checksum: 0fe524add6bf879385584db3e98c9b3d6e16d7fc8ae175da23b2236ee61f0674f623099fa06c4cf5bd0008955445c34cb9520e639dfdcbbcf549b633445b56f9 + checksum: aa11f01ef7765b96a8ad135f97eddd72e548e626bab4c9fcef7bf52633b1f49e5e4cd2f763356d4ae1ea8bb7f5f4d52110681e46913fc5800b0713a99c273316 languageName: node linkType: hard @@ -8928,20 +8904,6 @@ __metadata: languageName: node linkType: hard -"optionator@npm:^0.8.1": - version: 0.8.3 - resolution: "optionator@npm:0.8.3" - dependencies: - deep-is: ~0.1.3 - fast-levenshtein: ~2.0.6 - levn: ~0.3.0 - prelude-ls: ~1.1.2 - type-check: ~0.3.2 - word-wrap: ~1.2.3 - checksum: b8695ddf3d593203e25ab0900e265d860038486c943ff8b774f596a310f8ceebdb30c6832407a8198ba3ec9debe1abe1f51d4aad94843612db3b76d690c61d34 - languageName: node - linkType: hard - "optionator@npm:^0.9.1": version: 0.9.1 resolution: "optionator@npm:0.9.1" @@ -9024,31 +8986,30 @@ __metadata: languageName: node linkType: hard -"pac-proxy-agent@npm:^5.0.0": - version: 5.0.0 - resolution: "pac-proxy-agent@npm:5.0.0" +"pac-proxy-agent@npm:^7.0.0": + version: 7.0.1 + resolution: "pac-proxy-agent@npm:7.0.1" dependencies: - "@tootallnate/once": 1 - agent-base: 6 - debug: 4 - get-uri: 3 - http-proxy-agent: ^4.0.1 - https-proxy-agent: 5 - pac-resolver: ^5.0.0 - raw-body: ^2.2.0 - socks-proxy-agent: 5 - checksum: cfd26a0e2ebfea4ca6162465018ce093bf147d26cf6c8fb3e7155bc7c184370d80d4d09a1c097e3db7676d0e3f574ea1cb56a4aa7d1d2e5cca6238935fabf010 + "@tootallnate/quickjs-emscripten": ^0.23.0 + agent-base: ^7.0.2 + debug: ^4.3.4 + get-uri: ^6.0.1 + http-proxy-agent: ^7.0.0 + https-proxy-agent: ^7.0.2 + pac-resolver: ^7.0.0 + socks-proxy-agent: ^8.0.2 + checksum: 3d4aa48ec1c19db10158ecc1c4c9a9f77792294412d225ceb3dfa45d5a06950dca9755e2db0d9b69f12769119bea0adf2b24390d9c73c8d81df75e28245ae451 languageName: node linkType: hard -"pac-resolver@npm:^5.0.0": - version: 5.0.1 - resolution: "pac-resolver@npm:5.0.1" +"pac-resolver@npm:^7.0.0": + version: 7.0.0 + resolution: "pac-resolver@npm:7.0.0" dependencies: - degenerator: ^3.0.2 - ip: ^1.1.5 + degenerator: ^5.0.0 + ip: ^1.1.8 netmask: ^2.0.2 - checksum: e3bd8aada70d173cd4cec1ac810fb56161678b7a597060a740c4a31d9c5f8cd95687b2d0fd90b69c0cafe5ef787404074f38042ba08c8d378fed48973f58e493 + checksum: fa3a898c09848e93e35f5e23443fea36ddb393a851c76a23664a5bf3fcbe58ff77a0bcdae1e4f01b9ea87ea493c52e14d97a0fe39f92474d14cd45559c6e3cde languageName: node linkType: hard @@ -9229,13 +9190,6 @@ __metadata: languageName: node linkType: hard -"prelude-ls@npm:~1.1.2": - version: 1.1.2 - resolution: "prelude-ls@npm:1.1.2" - checksum: c4867c87488e4a0c233e158e4d0d5565b609b105d75e4c05dc760840475f06b731332eb93cc8c9cecb840aa8ec323ca3c9a56ad7820ad2e63f0261dadcb154e4 - languageName: node - linkType: hard - "prettier@npm:^2.5.1": version: 2.5.1 resolution: "prettier@npm:2.5.1" @@ -9321,7 +9275,7 @@ __metadata: languageName: node linkType: hard -"psl@npm:^1.1.28": +"psl@npm:^1.1.33": version: 1.9.0 resolution: "psl@npm:1.9.0" checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d @@ -9370,6 +9324,13 @@ __metadata: languageName: node linkType: hard +"querystringify@npm:^2.1.1": + version: 2.2.0 + resolution: "querystringify@npm:2.2.0" + checksum: 5641ea231bad7ef6d64d9998faca95611ed4b11c2591a8cae741e178a974f6a8e0ebde008475259abe1621cb15e692404e6b6626e927f7b849d5c09392604b15 + languageName: node + linkType: hard + "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -9412,7 +9373,7 @@ __metadata: languageName: node linkType: hard -"raw-body@npm:2.5.2, raw-body@npm:^2.2.0, raw-body@npm:^2.4.1": +"raw-body@npm:2.5.2, raw-body@npm:^2.4.1": version: 2.5.2 resolution: "raw-body@npm:2.5.2" dependencies: @@ -9461,18 +9422,6 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:1.1.x": - version: 1.1.14 - resolution: "readable-stream@npm:1.1.14" - dependencies: - core-util-is: ~1.0.0 - inherits: ~2.0.1 - isarray: 0.0.1 - string_decoder: ~0.10.x - checksum: 17dfeae3e909945a4a1abc5613ea92d03269ef54c49288599507fc98ff4615988a1c39a999dcf9aacba70233d9b7040bc11a5f2bfc947e262dedcc0a8b32b5a0 - languageName: node - linkType: hard - "readable-stream@npm:^2.0.0, readable-stream@npm:^2.3.3": version: 2.3.8 resolution: "readable-stream@npm:2.3.8" @@ -9599,6 +9548,13 @@ __metadata: languageName: node linkType: hard +"requires-port@npm:^1.0.0": + version: 1.0.0 + resolution: "requires-port@npm:1.0.0" + checksum: eee0e303adffb69be55d1a214e415cf42b7441ae858c76dfc5353148644f6fd6e698926fc4643f510d5c126d12a705e7c8ed7e38061113bdf37547ab356797ff + languageName: node + linkType: hard + "resolve-alpn@npm:^1.2.0": version: 1.2.1 resolution: "resolve-alpn@npm:1.2.1" @@ -9858,12 +9814,12 @@ __metadata: languageName: node linkType: hard -"semver@npm:^5.7.0, semver@npm:^5.7.1": - version: 5.7.1 - resolution: "semver@npm:5.7.1" +"semver@npm:^5.7.0": + version: 5.7.2 + resolution: "semver@npm:5.7.2" bin: - semver: ./bin/semver - checksum: 57fd0acfd0bac382ee87cd52cd0aaa5af086a7dc8d60379dfe65fea491fb2489b6016400813930ecd61fd0952dae75c115287a1b16c234b1550887117744dfaf + semver: bin/semver + checksum: fb4ab5e0dd1c22ce0c937ea390b4a822147a9c53dbd2a9a0132f12fe382902beef4fbf12cf51bb955248d8d15874ce8cd89532569756384f994309825f10b686 languageName: node linkType: hard @@ -10045,17 +10001,6 @@ __metadata: languageName: node linkType: hard -"socks-proxy-agent@npm:5": - version: 5.0.1 - resolution: "socks-proxy-agent@npm:5.0.1" - dependencies: - agent-base: ^6.0.2 - debug: 4 - socks: ^2.3.3 - checksum: 1b60c4977b2fef783f0fc4dc619cd2758aafdb43f3cf679f1e3627cb6c6e752811cee5513ebb4157ad26786033d2f85029440f197d321e8293b38cc5aab01e06 - languageName: node - linkType: hard - "socks-proxy-agent@npm:^6.1.1": version: 6.1.1 resolution: "socks-proxy-agent@npm:6.1.1" @@ -10078,7 +10023,18 @@ __metadata: languageName: node linkType: hard -"socks@npm:^2.3.3, socks@npm:^2.6.1, socks@npm:^2.6.2": +"socks-proxy-agent@npm:^8.0.2": + version: 8.0.2 + resolution: "socks-proxy-agent@npm:8.0.2" + dependencies: + agent-base: ^7.0.2 + debug: ^4.3.4 + socks: ^2.7.1 + checksum: 4fb165df08f1f380881dcd887b3cdfdc1aba3797c76c1e9f51d29048be6e494c5b06d68e7aea2e23df4572428f27a3ec22b3d7c75c570c5346507433899a4b6d + languageName: node + linkType: hard + +"socks@npm:^2.6.1, socks@npm:^2.6.2, socks@npm:^2.7.1": version: 2.7.1 resolution: "socks@npm:2.7.1" dependencies: @@ -10277,13 +10233,6 @@ __metadata: languageName: node linkType: hard -"string_decoder@npm:~0.10.x": - version: 0.10.31 - resolution: "string_decoder@npm:0.10.31" - checksum: fe00f8e303647e5db919948ccb5ce0da7dea209ab54702894dd0c664edd98e5d4df4b80d6fabf7b9e92b237359d21136c95bf068b2f7760b772ca974ba970202 - languageName: node - linkType: hard - "string_decoder@npm:~1.1.1": version: 1.1.1 resolution: "string_decoder@npm:1.1.1" @@ -10576,13 +10525,15 @@ __metadata: languageName: node linkType: hard -"tough-cookie@npm:~2.5.0": - version: 2.5.0 - resolution: "tough-cookie@npm:2.5.0" +"tough-cookie@npm:^4.1.3": + version: 4.1.3 + resolution: "tough-cookie@npm:4.1.3" dependencies: - psl: ^1.1.28 + psl: ^1.1.33 punycode: ^2.1.1 - checksum: 16a8cd090224dd176eee23837cbe7573ca0fa297d7e468ab5e1c02d49a4e9a97bb05fef11320605eac516f91d54c57838a25864e8680e27b069a5231d8264977 + universalify: ^0.2.0 + url-parse: ^1.5.3 + checksum: c9226afff36492a52118432611af083d1d8493a53ff41ec4ea48e5b583aec744b989e4280bcf476c910ec1525a89a4a0f1cae81c08b18fb2ec3a9b3a72b91dcc languageName: node linkType: hard @@ -10750,15 +10701,6 @@ __metadata: languageName: node linkType: hard -"type-check@npm:~0.3.2": - version: 0.3.2 - resolution: "type-check@npm:0.3.2" - dependencies: - prelude-ls: ~1.1.2 - checksum: dd3b1495642731bc0e1fc40abe5e977e0263005551ac83342ecb6f4f89551d106b368ec32ad3fb2da19b3bd7b2d1f64330da2ea9176d8ddbfe389fb286eb5124 - languageName: node - linkType: hard - "type-detect@npm:4.0.8": version: 4.0.8 resolution: "type-detect@npm:4.0.8" @@ -10853,7 +10795,7 @@ __metadata: debug: ^4.3.3 deep-equal: ^2.0.5 expect: 25.1.0 - 29 - mockttp: ^3.7.5 + mockttp: ^3.9.2 rimraf: ^5.0.1 rollup: ^3.21.1 rollup-plugin-dts: ^5.3.0 @@ -10919,6 +10861,13 @@ __metadata: languageName: node linkType: hard +"universalify@npm:^0.2.0": + version: 0.2.0 + resolution: "universalify@npm:0.2.0" + checksum: e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5 + languageName: node + linkType: hard + "universalify@npm:^2.0.0": version: 2.0.0 resolution: "universalify@npm:2.0.0" @@ -10963,6 +10912,16 @@ __metadata: languageName: node linkType: hard +"url-parse@npm:^1.5.3": + version: 1.5.10 + resolution: "url-parse@npm:1.5.10" + dependencies: + querystringify: ^2.1.1 + requires-port: ^1.0.0 + checksum: fbdba6b1d83336aca2216bbdc38ba658d9cfb8fc7f665eb8b17852de638ff7d1a162c198a8e4ed66001ddbf6c9888d41e4798912c62b4fd777a31657989f7bdf + languageName: node + linkType: hard + "util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" @@ -11029,18 +10988,6 @@ __metadata: languageName: node linkType: hard -"vm2@npm:^3.9.17": - version: 3.9.19 - resolution: "vm2@npm:3.9.19" - dependencies: - acorn: ^8.7.0 - acorn-walk: ^8.2.0 - bin: - vm2: bin/vm2 - checksum: fc6cf553134145cd7bb5246985bf242b056e3fb5ea71e2eef6710b2a5d6c6119cc6bc960435ff62480ee82efb43369be8f4db07b6690916ae7d3b2e714f395d8 - languageName: node - linkType: hard - "walker@npm:^1.0.8": version: 1.0.8 resolution: "walker@npm:1.0.8" @@ -11216,10 +11163,10 @@ __metadata: languageName: node linkType: hard -"word-wrap@npm:^1.2.3, word-wrap@npm:~1.2.3": - version: 1.2.3 - resolution: "word-wrap@npm:1.2.3" - checksum: 30b48f91fcf12106ed3186ae4fa86a6a1842416df425be7b60485de14bec665a54a68e4b5156647dec3a70f25e84d270ca8bc8cd23182ed095f5c7206a938c1f +"word-wrap@npm:^1.2.3": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: f93ba3586fc181f94afdaff3a6fef27920b4b6d9eaefed0f428f8e07adea2a7f54a5f2830ce59406c8416f033f86902b91eb824072354645eea687dff3691ccb languageName: node linkType: hard @@ -11306,13 +11253,6 @@ __metadata: languageName: node linkType: hard -"xregexp@npm:2.0.0": - version: 2.0.0 - resolution: "xregexp@npm:2.0.0" - checksum: de62d1f01c9f1a67c80cafe48a3dc081b324249a0e88e65dc9acae9cce6d8e63c9d91c0f97e2ad2d8c5351c856c139c04dc55ebd941e59b7d1d5c1169e164cff - languageName: node - linkType: hard - "xtend@npm:^4.0.0": version: 4.0.2 resolution: "xtend@npm:4.0.2" @@ -11355,23 +11295,23 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:13.1.1": - version: 13.1.1 - resolution: "yargs-parser@npm:13.1.1" +"yargs-parser@npm:13.1.1, yargs-parser@npm:^13.1.1": + version: 13.1.2 + resolution: "yargs-parser@npm:13.1.2" dependencies: camelcase: ^5.0.0 decamelize: ^1.2.0 - checksum: fa5fd27736aa423dc9a114d160dae94625f7faf19c252b8c91ac0197be9715d1dbc9b98fda893f75f182111fb6c3c0ce60c631b73859dd1a06bec07cddfb98f4 + checksum: c8bb6f44d39a4acd94462e96d4e85469df865de6f4326e0ab1ac23ae4a835e5dd2ddfe588317ebf80c3a7e37e741bd5cb0dc8d92bcc5812baefb7df7c885e86b languageName: node linkType: hard -"yargs-parser@npm:^13.1.1, yargs-parser@npm:^13.1.2": - version: 13.1.2 - resolution: "yargs-parser@npm:13.1.2" +"yargs-parser@npm:^15.0.1": + version: 15.0.3 + resolution: "yargs-parser@npm:15.0.3" dependencies: camelcase: ^5.0.0 decamelize: ^1.2.0 - checksum: c8bb6f44d39a4acd94462e96d4e85469df865de6f4326e0ab1ac23ae4a835e5dd2ddfe588317ebf80c3a7e37e741bd5cb0dc8d92bcc5812baefb7df7c885e86b + checksum: 06611c1893fa9f1c25ae79df3c6e2edbac7c8d75257a4b55b8432cbc87ee03eda86bea0537f65b4b8a0d9684c83fa6e9ef61ef720a1e5cc8a9aa6893b54ee4c3 languageName: node linkType: hard @@ -11383,13 +11323,15 @@ __metadata: linkType: hard "yargs-unparser@npm:1.6.0": - version: 1.6.0 - resolution: "yargs-unparser@npm:1.6.0" + version: 1.6.4 + resolution: "yargs-unparser@npm:1.6.4" dependencies: - flat: ^4.1.0 - lodash: ^4.17.15 - yargs: ^13.3.0 - checksum: ca662bb94af53d816d47f2162f0a1d135783f09de9fd47645a5cb18dd25532b0b710432b680d2c065ff45de122ba4a96433c41595fa7bfcc08eb12e889db95c1 + camelcase: ^5.3.1 + decamelize: ^1.2.0 + flat: ^5.0.2 + is-plain-obj: ^1.1.0 + yargs: ^14.2.3 + checksum: 428695924f6dc3b660cab37e5f1bb46a7bc64bb81e583beaaf40155f2d33440e3776518528e98902d256ed68fe4cc74c54c0188481ce8dba6857bc1656b5ca06 languageName: node linkType: hard @@ -11411,11 +11353,12 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^13.3.0": - version: 13.3.2 - resolution: "yargs@npm:13.3.2" +"yargs@npm:^14.2.3": + version: 14.2.3 + resolution: "yargs@npm:14.2.3" dependencies: cliui: ^5.0.0 + decamelize: ^1.2.0 find-up: ^3.0.0 get-caller-file: ^2.0.1 require-directory: ^2.1.1 @@ -11424,8 +11367,8 @@ __metadata: string-width: ^3.0.0 which-module: ^2.0.0 y18n: ^4.0.0 - yargs-parser: ^13.1.2 - checksum: 75c13e837eb2bb25717957ba58d277e864efc0cca7f945c98bdf6477e6ec2f9be6afa9ed8a876b251a21423500c148d7b91e88dee7adea6029bdec97af1ef3e8 + yargs-parser: ^15.0.1 + checksum: 684fcb1896e6c873c31c09c5c16445d6253dfe505aa879cff56d49425f5bca44f2ab8d7a1c949f3b932ae8654128425e89770e5e2f2c3d816e5816b9eb6efb6f languageName: node linkType: hard