-
Notifications
You must be signed in to change notification settings - Fork 18
Description
Summary
When @cypress/request
is run in a Node.js 21.x
or 22.x
environment, a deprecation notice is output:
[DEP0040] DeprecationWarning: The
punycode
module is deprecated. Please use a userland alternative instead.
punycode
has been deprecated in Node.js since v7.0.0
. Starting with Node.js 21.x
the deprecation is actively announced at run-time (see nodejs/node#47202).
The linked deprecation notice contains the text:
"The version of the punycode
module bundled in Node.js is being deprecated. In a future major version of Node.js this module will be removed."
This poses a risk for the future use of @cypress/request
.
Simplest Example to Reproduce
Create the following file as request_test.js
const request = require('@cypress/request');
request('https://github.com/cypress-io/request');
In a Node.js 22.x
environment, install @cypress/request
and execute with
node --trace-deprecation request_test.js
Alternatively execute the following in a clone of this repo:
npm install
export NODE_OPTIONS=--trace-deprecation
npm run test-ci
Expected Behavior
No deprecation warning should be produced when using @cypress/request
under Node.js 22.x
Current Behavior
When Node.js v21.0.0
is used, then running the test produces a deprecation warning:
$ node --trace-deprecation request_test.js
(node:3952) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
at node:punycode:3:9
at BuiltinModule.compileForInternalLoader (node:internal/bootstrap/realm:397:7)
at BuiltinModule.compileForPublicLoader (node:internal/bootstrap/realm:333:10)
at loadBuiltinModule (node:internal/modules/helpers:101:7)
at Module._load (node:internal/modules/cjs/loader:1006:17)
at Module.require (node:internal/modules/cjs/loader:1237:19)
at require (node:internal/modules/helpers:176:18)
at Object.<anonymous> (/home/mike/github/request_test/node_modules/psl/index.js:5:16)
at Module._compile (node:internal/modules/cjs/loader:1378:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1437:10)
showing that [email protected] is the problematic call.
$ npm ls psl
└─┬ @cypress/[email protected]
└─┬ [email protected]
└── [email protected]
Solution options
The Node.js punycode deprecation notice contains hints on how to update to a supported environment. It seems that this will not be possible to implement for @cypress/request
without major changes.
punycode
is not used directly by @cypress/request
so the issue could only be solved by updating dependencies. Since [email protected] is already the latest version and codecov
has been deprecated. At first glance that would seem to block resolving the issue through simple version update of dependencies.
Some dependencies are proposed for update through PR #45, however this does not solve the issue. (Edit: PR #45 is now closed.) It would require quite some effort to dig into each of the dependencies to check their relationship with this issue.
The repo request/request from which @cypress/request
is forked, was already deprecated on Feb 11, 2020 and therefore there will be no resolution available from the upstream repo.
Dependency tree
$ npm ls punycode
@cypress/[email protected]
├─┬ [email protected]
│ ├── [email protected]
│ └─┬ [email protected]
│ └── [email protected] deduped
├─┬ [email protected]
│ └─┬ [email protected]
│ └─┬ [email protected]
│ └── [email protected] deduped
├─┬ [email protected]
│ └─┬ [email protected]
│ ├─┬ [email protected]
│ │ └─┬ [email protected]
│ │ └─┬ [email protected]
│ │ └── [email protected]
│ └─┬ [email protected]
│ └── [email protected]
├─┬ [email protected]
│ └─┬ [email protected]
│ └─┬ [email protected]
│ └── [email protected] deduped
├─┬ [email protected]
│ ├─┬ [email protected]
│ │ └─┬ [email protected]
│ │ └── [email protected]
│ └─┬ [email protected]
│ └─┬ [email protected]
│ └── [email protected]
└─┬ [email protected]
└── [email protected]
[email protected]
├─┬ [email protected]
│ ├── [email protected]
│ └─┬ [email protected]
│ └── [email protected] deduped
browserify current version is [email protected]
published 3 years ago.
[email protected]
├─┬ [email protected]
│ └─┬ [email protected]
│ └─┬ [email protected]
│ └── [email protected] deduped
[email protected] is the latest version and the package has been deprecated.
[email protected]
├─┬ [email protected]
│ └─┬ [email protected]
│ └─┬ [email protected]
│ └── [email protected] deduped
karma-browserify current version is [email protected] published 2 years ago.
Context
https://nodejs.org/dist/latest-v21.x/docs/api/punycode.html#punycode
Since the version of the punycode
module bundled in Node.js is being deprecated and it will be removed in a future major version of Node.js, there is a risk that at some time in the future @cypress/request
will no longer work.
Your Environment
software | version |
---|---|
@cypress/request | 3.0.1 |
node | v21.0.0 v22.5.1 |
npm | 10.2.0 10.8.2 |
Operating System | Ubuntu 22.04.4 LTS |