cypress 15.16.0 → 15.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/bin/cypress CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  'use strict';
3
3
 
4
- var cli = require('../cli-B97CK6L9.js');
5
- require('../xvfb-SgoMy1_9.js');
4
+ var cli = require('../cli-CqSCkgQ7.js');
5
+ require('../xvfb-CqCqXRC-.js');
6
6
  require('os');
7
7
  require('bluebird');
8
8
  require('@cypress/xvfb');
@@ -32,7 +32,7 @@ require('commander');
32
32
  require('cli-table3');
33
33
  require('dayjs');
34
34
  require('dayjs/plugin/relativeTime');
35
- require('../spawn-BZQfzolX.js');
35
+ require('../spawn-Cnrq9zm4.js');
36
36
  require('child_process');
37
37
  require('listr2');
38
38
  require('readline');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var xvfb = require('./xvfb-SgoMy1_9.js');
3
+ var xvfb = require('./xvfb-CqCqXRC-.js');
4
4
  var _ = require('lodash');
5
5
  var commander = require('commander');
6
6
  var commonTags = require('common-tags');
@@ -13,7 +13,7 @@ var dayjs = require('dayjs');
13
13
  var relativeTime = require('dayjs/plugin/relativeTime');
14
14
  var chalk = require('chalk');
15
15
  var Bluebird = require('bluebird');
16
- var spawn = require('./spawn-BZQfzolX.js');
16
+ var spawn = require('./spawn-Cnrq9zm4.js');
17
17
  var os = require('os');
18
18
  var listr2 = require('listr2');
19
19
  var timers = require('timers/promises');
@@ -1575,6 +1575,8 @@ const descriptions = {
1575
1575
  group: 'a named group for recorded runs in Cypress Cloud',
1576
1576
  headed: 'displays the browser instead of running headlessly',
1577
1577
  headless: 'hide the browser instead of running headed (default for cypress run)',
1578
+ inspect: 'enable the Node.js inspector to debug the Cypress development process. only available when used with --dev',
1579
+ inspectBrk: 'enable the Node.js inspector and break before the Cypress development process starts. only available when used with --dev',
1578
1580
  key: 'your secret Record Key. you can omit this if you set a CYPRESS_RECORD_KEY environment variable.',
1579
1581
  parallel: 'enables concurrent runs and automatic load balancing of specs across multiple machines or processes',
1580
1582
  passWithNoTests: 'pass when no tests are found',
@@ -1703,8 +1705,7 @@ const addCypressRunCommand = (program) => {
1703
1705
  .option('--no-runner-ui', text('noRunnerUi'))
1704
1706
  .option('-o, --reporter-options <reporter-options>', text('reporterOptions'))
1705
1707
  .option('-s, --spec <spec>', text('spec'))
1706
- .option('-t, --tag <tag>', text('tag'))
1707
- .option('--dev', text('dev'), coerceFalse);
1708
+ .option('-t, --tag <tag>', text('tag'));
1708
1709
  };
1709
1710
  const addCypressOpenCommand = (program) => {
1710
1711
  return program
@@ -1721,14 +1722,24 @@ const addCypressOpenCommand = (program) => {
1721
1722
  .option('-x, --expose <expose>', text('expose'))
1722
1723
  .option('--global', text('global'))
1723
1724
  .option('-p, --port <port>', text('port'))
1724
- .option('-P, --project <project-path>', text('project'))
1725
- .option('--dev', text('dev'), coerceFalse);
1725
+ .option('-P, --project <project-path>', text('project'));
1726
+ };
1727
+ // `--dev`, `--inspect` and `--inspect-brk` are internal flags used when
1728
+ // developing Cypress itself. They are intentionally hidden from the public
1729
+ // `--help` output and only registered when `--dev` is actually passed, so that
1730
+ // released versions don't advertise flags that error for end users.
1731
+ // See https://github.com/cypress-io/cypress/issues/21320
1732
+ const maybeAddDevFlag = (program, args) => {
1733
+ if (args.includes('--dev')) {
1734
+ return program.option('--dev', text('dev'), coerceFalse);
1735
+ }
1736
+ return program;
1726
1737
  };
1727
- const maybeAddInspectFlags = (program) => {
1728
- if (process.argv.includes('--dev')) {
1738
+ const maybeAddInspectFlags = (program, args) => {
1739
+ if (args.includes('--dev')) {
1729
1740
  return program
1730
- .option('--inspect', 'Node option')
1731
- .option('--inspect-brk', 'Node option');
1741
+ .option('--inspect', text('inspect'))
1742
+ .option('--inspect-brk', text('inspectBrk'));
1732
1743
  }
1733
1744
  return program;
1734
1745
  };
@@ -1769,7 +1780,7 @@ const cliModule = {
1769
1780
  cliArgs.unshift(null, null);
1770
1781
  debug('creating program parser');
1771
1782
  const program = createProgram();
1772
- maybeAddInspectFlags(addCypressRunCommand(program))
1783
+ maybeAddInspectFlags(maybeAddDevFlag(addCypressRunCommand(program), cliArgs), cliArgs)
1773
1784
  .action((...fnArgs) => {
1774
1785
  debug('parsed Cypress run %o', fnArgs);
1775
1786
  const options = parseVariableOpts(fnArgs, cliArgs);
@@ -1801,7 +1812,7 @@ const cliModule = {
1801
1812
  cliArgs.unshift(null, null);
1802
1813
  debug('creating program parser');
1803
1814
  const program = createProgram();
1804
- maybeAddInspectFlags(addCypressOpenCommand(program))
1815
+ maybeAddInspectFlags(maybeAddDevFlag(addCypressOpenCommand(program), cliArgs), cliArgs)
1805
1816
  .action((...fnArgs) => {
1806
1817
  debug('parsed Cypress open %o', fnArgs);
1807
1818
  const options = parseVariableOpts(fnArgs, cliArgs);
@@ -1871,7 +1882,7 @@ const cliModule = {
1871
1882
  .option('-v, --version', text('version'))
1872
1883
  .command('version')
1873
1884
  .description(text('version')));
1874
- maybeAddInspectFlags(addCypressOpenCommand(program))
1885
+ maybeAddInspectFlags(maybeAddDevFlag(addCypressOpenCommand(program), args), args)
1875
1886
  .action((opts) => xvfb.__awaiter(this, void 0, void 0, function* () {
1876
1887
  debug('opening Cypress');
1877
1888
  try {
@@ -1882,7 +1893,7 @@ const cliModule = {
1882
1893
  xvfb.util.logErrorExit1(e);
1883
1894
  }
1884
1895
  }));
1885
- maybeAddInspectFlags(addCypressRunCommand(program))
1896
+ maybeAddInspectFlags(maybeAddDevFlag(addCypressRunCommand(program), args), args)
1886
1897
  .action((...fnArgs) => xvfb.__awaiter(this, void 0, void 0, function* () {
1887
1898
  debug('running Cypress with args %o', fnArgs);
1888
1899
  try {
@@ -1906,11 +1917,10 @@ const cliModule = {
1906
1917
  xvfb.util.logErrorExit1(e);
1907
1918
  }
1908
1919
  }));
1909
- program
1920
+ maybeAddDevFlag(program
1910
1921
  .command('verify')
1911
1922
  .usage('[options]')
1912
- .description('Verifies that Cypress is installed correctly and executable')
1913
- .option('--dev', text('dev'), coerceFalse)
1923
+ .description('Verifies that Cypress is installed correctly and executable'), args)
1914
1924
  .action((opts) => xvfb.__awaiter(this, void 0, void 0, function* () {
1915
1925
  const defaultOpts = { force: true, welcomeMessage: false };
1916
1926
  const parsedOpts = xvfb.util.parseOpts(opts);
@@ -1961,11 +1971,10 @@ const cliModule = {
1961
1971
  cacheModule[command]();
1962
1972
  });
1963
1973
  });
1964
- program
1974
+ maybeAddDevFlag(program
1965
1975
  .command('info')
1966
1976
  .usage('[command]')
1967
- .description('Prints Cypress and system information')
1968
- .option('--dev', text('dev'), coerceFalse)
1977
+ .description('Prints Cypress and system information'), args)
1969
1978
  .action((opts) => xvfb.__awaiter(this, void 0, void 0, function* () {
1970
1979
  try {
1971
1980
  const code = yield methods.start(opts);
package/dist/cli.js CHANGED
@@ -2,14 +2,14 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- require('./xvfb-SgoMy1_9.js');
5
+ require('./xvfb-CqCqXRC-.js');
6
6
  require('lodash');
7
7
  require('commander');
8
8
  require('common-tags');
9
9
  require('log-symbols');
10
10
  require('debug');
11
- var cli = require('./cli-B97CK6L9.js');
12
- require('./spawn-BZQfzolX.js');
11
+ var cli = require('./cli-CqSCkgQ7.js');
12
+ require('./spawn-Cnrq9zm4.js');
13
13
  require('os');
14
14
  require('bluebird');
15
15
  require('@cypress/xvfb');
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var xvfb = require('./xvfb-SgoMy1_9.js');
3
+ var xvfb = require('./xvfb-CqCqXRC-.js');
4
4
  var tmp = require('tmp');
5
5
  var fs = require('fs-extra');
6
- var cli$1 = require('./cli-B97CK6L9.js');
6
+ var cli$1 = require('./cli-CqSCkgQ7.js');
7
7
 
8
8
  /**
9
9
  * Opens Cypress GUI
package/dist/cypress.js CHANGED
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
- require('./xvfb-SgoMy1_9.js');
3
+ require('./xvfb-CqCqXRC-.js');
4
4
  require('tmp');
5
5
  require('fs-extra');
6
- require('./cli-B97CK6L9.js');
7
- var cypress = require('./cypress-DuMyFGfr.js');
6
+ require('./cli-CqSCkgQ7.js');
7
+ var cypress = require('./cypress-BZS7OvER.js');
8
8
  require('os');
9
9
  require('bluebird');
10
10
  require('@cypress/xvfb');
@@ -33,7 +33,7 @@ require('commander');
33
33
  require('cli-table3');
34
34
  require('dayjs');
35
35
  require('dayjs/plugin/relativeTime');
36
- require('./spawn-BZQfzolX.js');
36
+ require('./spawn-Cnrq9zm4.js');
37
37
  require('child_process');
38
38
  require('listr2');
39
39
  require('readline');
@@ -1,12 +1,12 @@
1
1
  'use strict';
2
2
 
3
- require('../xvfb-SgoMy1_9.js');
3
+ require('../xvfb-CqCqXRC-.js');
4
4
  require('lodash');
5
5
  require('os');
6
6
  require('child_process');
7
7
  require('path');
8
8
  require('debug');
9
- var spawn = require('../spawn-BZQfzolX.js');
9
+ var spawn = require('../spawn-Cnrq9zm4.js');
10
10
  require('readline');
11
11
  require('process');
12
12
  require('stream');
package/dist/exec/xvfb.js CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var xvfb = require('../xvfb-SgoMy1_9.js');
5
+ var xvfb = require('../xvfb-CqCqXRC-.js');
6
6
  require('os');
7
7
  require('bluebird');
8
8
  require('@cypress/xvfb');
package/dist/index.js CHANGED
@@ -2,12 +2,12 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var xvfb = require('./xvfb-SgoMy1_9.js');
5
+ var xvfb = require('./xvfb-CqCqXRC-.js');
6
6
  var minimist = require('minimist');
7
7
  var Debug = require('debug');
8
- var cli$1 = require('./cli-B97CK6L9.js');
9
- var spawn = require('./spawn-BZQfzolX.js');
10
- var cypress = require('./cypress-DuMyFGfr.js');
8
+ var cli$1 = require('./cli-CqSCkgQ7.js');
9
+ var spawn = require('./spawn-Cnrq9zm4.js');
10
+ var cypress = require('./cypress-BZS7OvER.js');
11
11
  require('os');
12
12
  require('bluebird');
13
13
  require('@cypress/xvfb');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var xvfb = require('./xvfb-SgoMy1_9.js');
3
+ var xvfb = require('./xvfb-CqCqXRC-.js');
4
4
  var _ = require('lodash');
5
5
  var os = require('os');
6
6
  var cp = require('child_process');
@@ -1060,6 +1060,8 @@ var distExports = requireDist();
1060
1060
  const debug = Debug('cypress:cli');
1061
1061
  const debugElectron = Debug('cypress:electron');
1062
1062
  const debugStderr = Debug('cypress:internal-stderr');
1063
+ // Must match CYPRESS_OPEN_READY_MESSAGE in packages/server/lib/modes/interactive.ts
1064
+ const CYPRESS_OPEN_READY_MESSAGE = 'Cypress is ready';
1063
1065
  function isPlatform(platform) {
1064
1066
  return os.platform() === platform;
1065
1067
  }
@@ -1131,6 +1133,13 @@ function createSpawnFunction(executable, args, options) {
1131
1133
  debug('passing DISPLAY', process$1.env.DISPLAY);
1132
1134
  stdioOptions.env.DISPLAY = process$1.env.DISPLAY;
1133
1135
  }
1136
+ if (stdioOptions.detached) {
1137
+ // Ask interactive mode to print a ready sentinel on stdout; pipe stdio during
1138
+ // startup so errors are visible and we can detect it. Streams are destroyed
1139
+ // once it arrives so they don't keep the parent event loop alive.
1140
+ args.push('--emit-when-ready');
1141
+ stdioOptions.stdio = ['ignore', 'pipe', 'pipe'];
1142
+ }
1134
1143
  if (stdioOptions.env.ELECTRON_RUN_AS_NODE) {
1135
1144
  // Since we are running electron as node, we need to add an entry point file.
1136
1145
  startScriptPath = path.join(xvfb.stateModule.getBinaryPkgPath(path.dirname(executable)), '..', 'index.js');
@@ -1205,6 +1214,26 @@ function createSpawnFunction(executable, args, options) {
1205
1214
  });
1206
1215
  }
1207
1216
  }
1217
+ if (stdioOptions.detached) {
1218
+ child.stdout.on('data', (data) => {
1219
+ const str = data.toString();
1220
+ const readyMessageIndex = str.indexOf(CYPRESS_OPEN_READY_MESSAGE);
1221
+ const isReady = readyMessageIndex !== -1;
1222
+ if (isReady) {
1223
+ const outputBeforeReady = str.slice(0, readyMessageIndex);
1224
+ if (outputBeforeReady)
1225
+ process$1.stdout.write(outputBeforeReady);
1226
+ child.stdout.destroy();
1227
+ child.stderr.destroy();
1228
+ child.unref();
1229
+ resolve(0);
1230
+ return;
1231
+ }
1232
+ process$1.stdout.write(data);
1233
+ });
1234
+ child.stderr.pipe(process$1.stderr, { end: false });
1235
+ return;
1236
+ }
1208
1237
  // if stdio options is set to 'pipe', then
1209
1238
  // we should set up pipes:
1210
1239
  // process STDIN (read stream) => child STDIN (writeable)
@@ -1258,9 +1287,6 @@ function createSpawnFunction(executable, args, options) {
1258
1287
  }
1259
1288
  reject(err);
1260
1289
  });
1261
- if (stdioOptions.detached) {
1262
- child.unref();
1263
- }
1264
1290
  }));
1265
1291
  };
1266
1292
  }
@@ -907,19 +907,6 @@ const invalidConfigFile = {
907
907
  description: '`--config-file` cannot be false.',
908
908
  solution: 'Either pass a relative path to a valid Cypress config file or remove this option.',
909
909
  };
910
- /**
911
- * This error happens when CLI detects that the child Test Runner process
912
- * was killed with a signal, like SIGBUS
913
- * @see https://github.com/cypress-io/cypress/issues/5808
914
- * @param {'close'|'event'} eventName Child close event name
915
- * @param {string} signal Signal that closed the child process, like "SIGBUS"
916
- */
917
- const childProcessKilled = (eventName, signal) => {
918
- return {
919
- description: `The Test Runner unexpectedly exited via a ${chalk.cyan(eventName)} event with signal ${chalk.cyan(signal)}`,
920
- solution: solutionUnknown,
921
- };
922
- };
923
910
  const CYPRESS_RUN_BINARY = {
924
911
  notValid: (value) => {
925
912
  const properFormat = `**/${stateModule.getPlatformExecutable()}`;
@@ -1033,7 +1020,6 @@ const errors = {
1033
1020
  invalidCacheDirectory,
1034
1021
  CYPRESS_RUN_BINARY,
1035
1022
  smokeTestFailure,
1036
- childProcessKilled,
1037
1023
  incompatibleHeadlessFlags,
1038
1024
  invalidRunProjectPath,
1039
1025
  invalidTestingType,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cypress",
3
- "version": "15.16.0",
3
+ "version": "15.17.0",
4
4
  "main": "dist/index.js",
5
5
  "scripts": {
6
6
  "postinstall": "node dist/index.js --exec install",
@@ -138,8 +138,8 @@
138
138
  },
139
139
  "buildInfo": {
140
140
  "commitBranch": "develop",
141
- "commitSha": "22aaf2371462ec13f138fd96c11e8f9f885ed575",
142
- "commitDate": "2026-05-26T16:59:59.000Z",
141
+ "commitSha": "b22780a9bb118b86730e22243aba16e25e7a5bed",
142
+ "commitDate": "2026-06-09T13:13:52.000Z",
143
143
  "stable": true
144
144
  },
145
145
  "description": "Cypress is a next generation front end testing tool built for the modern web",
@@ -1486,6 +1486,22 @@ declare namespace Cypress {
1486
1486
  * cy.get('button').should('be.visible')
1487
1487
  */
1488
1488
  get<K extends keyof HTMLElementTagNameMap>(selector: K, options?: Partial<Loggable & Timeoutable & Withinable & Shadow>): Chainable<JQuery<HTMLElementTagNameMap[K]>>
1489
+ /**
1490
+ * Get aliased DOM elements, intercepts, spies, stubs, or wrapped values via `@` prefix.
1491
+ * Use the `S` type parameter to specify the type of the aliased subject.
1492
+ * @see https://on.cypress.io/get#Alias
1493
+ * @example
1494
+ * // Get the aliased 'todos' elements
1495
+ * cy.get('ul#todos').as('todos')
1496
+ * cy.get<JQuery<HTMLLIElement>>('@todos')
1497
+ *
1498
+ * // Alias a wrapped value and retrieve it with proper typing
1499
+ * cy.wrap({ name: 'Jane' }).as('user')
1500
+ * cy.get<{ name: string }>('@user').then((user) => {
1501
+ * // user is typed as { name: string }
1502
+ * })
1503
+ */
1504
+ get<S = any>(alias: `@${string}`, options?: Partial<Loggable & Timeoutable & Withinable & Shadow>): Chainable<S>
1489
1505
  /**
1490
1506
  * Get one or more DOM elements by selector.
1491
1507
  * The querying behavior of this command matches exactly how $(…) works in jQuery.
@@ -1496,17 +1512,6 @@ declare namespace Cypress {
1496
1512
  * cy.get('.dropdown-menu').click()
1497
1513
  */
1498
1514
  get<E extends Node = HTMLElement>(selector: string, options?: Partial<Loggable & Timeoutable & Withinable & Shadow>): Chainable<JQuery<E>>
1499
- /**
1500
- * Get one or more DOM elements by alias.
1501
- * @see https://on.cypress.io/get#Alias
1502
- * @example
1503
- * // Get the aliased 'todos' elements
1504
- * cy.get('ul#todos').as('todos')
1505
- * //...hack hack hack...
1506
- * //later retrieve the todos
1507
- * cy.get('@todos')
1508
- */
1509
- get<S = any>(alias: string, options?: Partial<Loggable & Timeoutable & Withinable & Shadow>): Chainable<S>
1510
1515
 
1511
1516
  /**
1512
1517
  * Get a browser cookie by its name.
@@ -3442,6 +3447,7 @@ declare namespace Cypress {
3442
3447
  >, Partial<Pick<ResolvedConfigOptions, 'baseUrl' | 'testIsolation'>> {
3443
3448
  browser?: IsBrowserMatcher | IsBrowserMatcher[]
3444
3449
  keystrokeDelay?: number
3450
+ expose?: Record<string, any>
3445
3451
  }
3446
3452
 
3447
3453
  interface TestConfigOverrides extends Partial<
@@ -3449,6 +3455,7 @@ declare namespace Cypress {
3449
3455
  >, Partial<Pick<ResolvedConfigOptions, 'baseUrl'>> {
3450
3456
  browser?: IsBrowserMatcher | IsBrowserMatcher[]
3451
3457
  keystrokeDelay?: number
3458
+ expose?: Record<string, any>
3452
3459
  }
3453
3460
 
3454
3461
  /**
@@ -548,7 +548,7 @@ declare global {
548
548
  })
549
549
  ```
550
550
  */
551
- wait<TRequest = any, TResponse = any>(alias: string, options?: Partial<WaitOptions>): Chainable<Interception<TRequest, TResponse>>
551
+ wait<TRequest = any, TResponse = any>(alias: `@${string}`, options?: Partial<WaitOptions>): Chainable<Interception<TRequest, TResponse>>
552
552
  /**
553
553
  * Wait for list of requests to complete.
554
554
  *
@@ -568,7 +568,7 @@ declare global {
568
568
  })
569
569
  ```
570
570
  */
571
- wait(aliases: string[], options?: Partial<WaitOptions>): Chainable<Interception[]>
571
+ wait(aliases: `@${string}`[], options?: Partial<WaitOptions>): Chainable<Interception[]>
572
572
  }
573
573
  }
574
574
  }