- Initial packaging of Nodejs 18.2.0. For detailed changes

since previous versions, see
  https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V18.md#18.2.0

OBS-URL: https://build.opensuse.org/package/show/devel:languages:nodejs/nodejs18?expand=0&rev=1
This commit is contained in:
Adam Majer 2022-05-19 15:11:22 +00:00 committed by Git OBS Bridge
commit 38fc9b6db2
27 changed files with 2719 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

27
SHASUMS256.txt Normal file
View File

@ -0,0 +1,27 @@
7bb0a93a3f6b9b0a46194420fc554c1d12682aef7d8822cfd2bbb3639f5b2059 node-v18.2.0-aix-ppc64.tar.gz
d140f15ca709767365e09edd0cb345f10f32f582d82d726f67f63dd7db4443d1 node-v18.2.0-darwin-arm64.tar.gz
c73ea354c84c3bd9889c064346b6e3aaa292c33f1fb4a4793cdee7a155a5a67e node-v18.2.0-darwin-arm64.tar.xz
0b03647ac5805df335c6601d1a1838c6a2f4edbed7d098982bfd39e71b5fd8f8 node-v18.2.0-darwin-x64.tar.gz
e4d277afacb96e7d492dab3613a1612853e9a67a3a528dfc7e124a4c7370f0d6 node-v18.2.0-darwin-x64.tar.xz
c7dba1404ea1457a8c8292821d02fc835c862f716d7f5cab3aab545d6847a814 node-v18.2.0-headers.tar.gz
97a017643b40a91f73f5f3b0d91f4f653406ba05b7dd6e2129454ad6f49c2e28 node-v18.2.0-headers.tar.xz
9dc8ca472c79e842d4faf600876b643ab485936fe4870fbafaa7c19b2d153353 node-v18.2.0-linux-arm64.tar.gz
ad2c1e533db66cfb47e770c1f4af6807e1ce68cdce8aa230d26f025d0926d0c4 node-v18.2.0-linux-arm64.tar.xz
ace6a5da82794e1f364d284ee241b24c08048677c77b24c370c5a677189400f7 node-v18.2.0-linux-armv7l.tar.gz
1d7c6c8fb0715a501b889a58de9d3c7a54a0c62578ea4109d2b17adaf12a99f7 node-v18.2.0-linux-armv7l.tar.xz
d81d0ede439e082971c02e4d64ee95e5215753cfa3891cdfafd266c221767c21 node-v18.2.0-linux-ppc64le.tar.gz
053824eeb17a1afea11e437a2ae9061568e9ab95daa0ea818cfcd4246bfd950c node-v18.2.0-linux-ppc64le.tar.xz
f11f97a74b3a7ae19d8acac166e9de5e3e095a54ba5a0d7afaefd77b589f277f node-v18.2.0-linux-s390x.tar.gz
1dbe758651e66ba47b9f1a5650a295f424fe36bcd709e7ef71f9a4668c2f3081 node-v18.2.0-linux-s390x.tar.xz
73d3f98e96e098587c2154dcaa82a6469a510e89a4881663dc4c86985acf245e node-v18.2.0-linux-x64.tar.gz
22f9d2e71fe682091f1ec5f8be5703868069f5547a866bdddc8e661040b28527 node-v18.2.0-linux-x64.tar.xz
ac92b964ce08c96ac44da76df764e5981f319c7fc0c35dc49deab1188fa5d292 node-v18.2.0.pkg
bb9c117814341676edbfd7c79cfaaac2d809e760a65fe9afe050245d55bb7ca7 node-v18.2.0.tar.gz
2305b15ebf5547474e905b5002f9ba99c7eeef01d7394dfe6f3846cc6bcad66d node-v18.2.0.tar.xz
09586f2af26a5d73cfe95f7b576c058fe359de126c3d3655e00cb010261a97ba node-v18.2.0-win-x64.7z
deaa04e8ba65e568f02452c9313b9e6ee80fcef9c0929062fc5175a401fa05ce node-v18.2.0-win-x64.zip
c10293d857223e8f9afd79f8f2e021d1cf07920d108b9e285cd48bdcad9d5076 node-v18.2.0-x64.msi
09392b4eaa439add5a8e9e1cfb44dedf0b748a7bcad4257aa8ad187a6d0a432a win-x64/node.exe
005cd83dd73e222a2fa36a967b365749feb9e39eddd0078b6ef0df7802494671 win-x64/node.lib
d854462a87392625086808337c716ab4e1a49213b1a93ea47d0f5dc02b57a1e4 win-x64/node_pdb.7z
3cf29058aceac04ee87176285be14bdf933aa7c8cf1bdfb8c206fecf51c29494 win-x64/node_pdb.zip

BIN
SHASUMS256.txt.sig Normal file

Binary file not shown.

11
_constraints Normal file
View File

@ -0,0 +1,11 @@
<?xml version="1.0"?>
<constraints>
<hardware>
<disk>
<size unit="G">8</size>
</disk>
<physicalmemory>
<size unit="M">10000</size>
</physicalmemory>
</hardware>
</constraints>

16
bash_output_helper.bash Normal file
View File

@ -0,0 +1,16 @@
#
# Node can break stdin/stdout/stderr by setting them O_NONBLOCK
# and then not resetting it back to blocking mode on exit
# This function redirects stdio descriptors via new logging pipe
#
function decoupled_cmd
{
mkfifo _log
($@) < /dev/null > _log 2>_log &
cat _log
rm _log
wait $!
}

View File

@ -0,0 +1,13 @@
Index: node-v14.17.5/src/cares_wrap.h
===================================================================
--- node-v14.17.5.orig/src/cares_wrap.h
+++ node-v14.17.5/src/cares_wrap.h
@@ -22,7 +22,7 @@
# include <netdb.h>
#endif // __POSIX__
-# include <ares_nameser.h>
+#include <arpa/nameser.h>
namespace node {
namespace cares_wrap {

144
fix_ci_tests.patch Normal file
View File

@ -0,0 +1,144 @@
Author: Adam Majer <amajer@suse.de>
Date: Dec 20 09:18:49 UTC 2017
Summary: Fix CI unit tests framework for OBS building
Index: node-v16.14.2/test/parallel/test-module-loading-globalpaths.js
===================================================================
--- node-v16.14.2.orig/test/parallel/test-module-loading-globalpaths.js
+++ node-v16.14.2/test/parallel/test-module-loading-globalpaths.js
@@ -11,6 +11,9 @@ const { addLibraryPath } = require('../c
addLibraryPath(process.env);
+common.skip('hardcoded global paths');
+return;
+
if (process.argv[2] === 'child') {
console.log(require(pkgName).string);
} else {
Index: node-v16.14.2/test/parallel/test-tls-passphrase.js
===================================================================
--- node-v16.14.2.orig/test/parallel/test-tls-passphrase.js
+++ node-v16.14.2/test/parallel/test-tls-passphrase.js
@@ -223,7 +223,7 @@ server.listen(0, common.mustCall(functio
}, onSecureConnect());
})).unref();
-const errMessageDecrypt = /bad decrypt/;
+const errMessageDecrypt = /bad (decrypt|password read)/;
// Missing passphrase
assert.throws(function() {
Index: node-v16.14.2/test/parallel/test-repl-envvars.js
===================================================================
--- node-v16.14.2.orig/test/parallel/test-repl-envvars.js
+++ node-v16.14.2/test/parallel/test-repl-envvars.js
@@ -2,7 +2,9 @@
// Flags: --expose-internals
-require('../common');
+const common = require('../common');
+common.skip('Not running test in OBS');
+
const stream = require('stream');
const REPL = require('internal/repl');
const assert = require('assert');
Index: node-v16.14.2/test/common/index.mjs
===================================================================
--- node-v16.14.2.orig/test/common/index.mjs
+++ node-v16.14.2/test/common/index.mjs
@@ -42,6 +42,7 @@ const {
expectsError,
skipIfInspectorDisabled,
skipIf32Bits,
+ skipIfWorker,
getArrayBufferViews,
getBufferSources,
getTTYfd,
@@ -87,6 +88,7 @@ export {
expectsError,
skipIfInspectorDisabled,
skipIf32Bits,
+ skipIfWorker,
getArrayBufferViews,
getBufferSources,
getTTYfd,
Index: node-v16.14.2/Makefile
===================================================================
--- node-v16.14.2.orig/Makefile
+++ node-v16.14.2/Makefile
@@ -523,7 +523,8 @@ test-ci-js: | clear-stalled
.PHONY: test-ci
# Related CI jobs: most CI tests, excluding node-test-commit-arm-fanned
test-ci: LOGLEVEL := info
-test-ci: | clear-stalled bench-addons-build build-addons build-js-native-api-tests build-node-api-tests doc-only
+test-ci: | clear-stalled bench-addons-build build-addons build-js-native-api-tests build-node-api-tests
+ strip $(NODE_EXE)
out/Release/cctest --gtest_output=xml:out/junit/cctest.xml
$(PYTHON) tools/test.py $(PARALLEL_ARGS) -p tap --logfile test.tap \
--mode=$(BUILDTYPE_LOWER) --flaky-tests=$(FLAKY_TESTS) \
@@ -716,7 +717,8 @@ apidocs_json = $(addprefix out/,$(apidoc
apiassets = $(subst api_assets,api/assets,$(addprefix out/,$(wildcard doc/api_assets/*)))
tools/doc/node_modules: tools/doc/package.json
- @if [ "$(shell $(node_use_openssl))" != "true" ]; then \
+ echo "Skipping tools/doc/node_modules"
+# @if [ "$(shell $(node_use_openssl))" != "true" ]; then \
echo "Skipping tools/doc/node_modules (no crypto)"; \
else \
cd tools/doc && $(call available-node,$(run-npm-ci)) \
Index: node-v16.14.2/test/parallel/test-crypto-dh.js
===================================================================
--- node-v16.14.2.orig/test/parallel/test-crypto-dh.js
+++ node-v16.14.2/test/parallel/test-crypto-dh.js
@@ -167,7 +167,7 @@ assert.throws(() => {
dh3.computeSecret('');
}, { message: common.hasOpenSSL3 ?
'error:02800080:Diffie-Hellman routines::invalid secret' :
- 'Supplied key is too small' });
+ /Supplied key is too small|error:05066066:Diffie-Hellman routines:compute_key:invalid public key/ });
// Invalid test: curve argument is undefined
assert.throws(
Index: node-v16.14.2/test/parallel/test-zlib-dictionary-fail.js
===================================================================
--- node-v16.14.2.orig/test/parallel/test-zlib-dictionary-fail.js
+++ node-v16.14.2/test/parallel/test-zlib-dictionary-fail.js
@@ -53,7 +53,7 @@ const input = Buffer.from([0x78, 0xBB, 0
stream.on('error', common.mustCall(function(err) {
// It's not possible to separate invalid dict and invalid data when using
// the raw format
- assert.match(err.message, /invalid/);
+ assert.match(err.message, /(invalid|Operation-Ending-Supplemental Code is 0x12)/);
}));
stream.write(input);
Index: node-v16.14.2/test/parallel/test-zlib-flush-drain-longblock.js
===================================================================
--- node-v16.14.2.orig/test/parallel/test-zlib-flush-drain-longblock.js
+++ node-v16.14.2/test/parallel/test-zlib-flush-drain-longblock.js
@@ -16,7 +16,7 @@ zipper.write('A'.repeat(17000));
zipper.flush();
let received = 0;
-unzipper.on('data', common.mustCall((d) => {
+unzipper.on('data', common.mustCallAtLeast((d) => {
received += d.length;
}, 2));
Index: node-v16.14.2/test/parallel/test-zlib-from-string.js
===================================================================
--- node-v16.14.2.orig/test/parallel/test-zlib-from-string.js
+++ node-v16.14.2/test/parallel/test-zlib-from-string.js
@@ -55,7 +55,9 @@ const expectedBase64Gzip = 'H4sIAAAAAAAA
'sHnHNzRtagj5AQAA';
zlib.deflate(inputString, common.mustCall((err, buffer) => {
- assert.strictEqual(buffer.toString('base64'), expectedBase64Deflate);
+ zlib.unzip(buffer, common.mustCall((err, unzipped) => {
+ assert.strictEqual(unzipped.toString(), inputString);
+ }));
}));
zlib.gzip(inputString, common.mustCall((err, buffer) => {

21
flaky_test_rerun.patch Normal file
View File

@ -0,0 +1,21 @@
Index: node-v16.13.0/tools/test.py
===================================================================
--- node-v16.13.0.orig/tools/test.py
+++ node-v16.13.0/tools/test.py
@@ -586,6 +586,16 @@ class TestCase(object):
self.context.store_unexpected_output)
def Run(self):
+ reruns = 0
+ while (reruns < 5):
+ reruns += 1
+ result = self.OriginalRun()
+ if (not result.HasFailed()):
+ break
+ print("FLAKY TEST rerun: ", self.GetCommand())
+ return result
+
+ def OriginalRun(self):
try:
result = self.RunCommand(self.GetCommand(), {
"TEST_SERIAL_ID": "%d" % self.serial_id,

26
legacy_python.patch Normal file
View File

@ -0,0 +1,26 @@
Index: node-v16.5.0/tools/utils.py
===================================================================
--- node-v16.5.0.orig/tools/utils.py
+++ node-v16.5.0/tools/utils.py
@@ -26,10 +26,10 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-import glob
import platform
import re
import sys
+from pathlib import Path
# Reads a .list file into an array of strings
@@ -109,7 +109,8 @@ def IsWindows():
def SearchFiles(dir, ext):
- list = glob.glob(dir+ '/**/*.' + ext, recursive=True)
+ list = Path(dir).glob('**/*.' + ext)
+ list = [ str(x) for x in list ]
if sys.platform == 'win32':
list = [ x.replace('\\', '/')for x in list]
return list

75
linker_lto_jobs.patch Normal file
View File

@ -0,0 +1,75 @@
Purpose of these dependencies is to make sure that the linker
is run serially over these binaries instead of in parallel.
OBS workers run out of memory as each executable seems to require
upward of 5G RAM
Index: node-v14.9.0/node.gyp
===================================================================
--- node-v14.9.0.orig/node.gyp
+++ node-v14.9.0/node.gyp
@@ -1258,20 +1258,21 @@
'target_name': 'embedtest',
'type': 'executable',
'dependencies': [
'<(node_lib_target_name)',
'deps/histogram/histogram.gyp:histogram',
'deps/uvwasi/uvwasi.gyp:uvwasi',
'node_dtrace_header',
'node_dtrace_ustack',
'node_dtrace_provider',
+ 'cctest',
],
'includes': [
'node.gypi'
],
'include_dirs': [
'src',
'tools/msvs/genfiles',
'deps/v8/include',
@@ -1317,20 +1318,21 @@
# So generate_code_cache -> mkcodecache -> node_lib_base,
# node_lib -> node_lib_base & generate_code_cache
{
'target_name': 'mkcodecache',
'type': 'executable',
'dependencies': [
'<(node_lib_target_name)',
'deps/histogram/histogram.gyp:histogram',
'deps/uvwasi/uvwasi.gyp:uvwasi',
+ 'embedtest',
],
'includes': [
'node.gypi'
],
'include_dirs': [
'src',
'tools/msvs/genfiles',
'deps/v8/include',
@@ -1372,20 +1374,21 @@
],
}, # mkcodecache
{
'target_name': 'node_mksnapshot',
'type': 'executable',
'dependencies': [
'<(node_lib_target_name)',
'deps/histogram/histogram.gyp:histogram',
'deps/uvwasi/uvwasi.gyp:uvwasi',
+ 'mkcodecache'
],
'includes': [
'node.gypi'
],
'include_dirs': [
'src',
'tools/msvs/genfiles',
'deps/v8/include',

20
manual_configure.patch Normal file
View File

@ -0,0 +1,20 @@
Author: Adam Majer <amajer@suse.de>
Date: Wed May 23 14:13:33 CEST 2018
Summary: This config.h is defined by hand
Gyp doesn't run autotools, so this config is not quite correct.
Update to prevent implicit defines to be used.
Index: node-git.8dae89b396/deps/nghttp2/lib/includes/config.h
===================================================================
--- node-git.8dae89b396.orig/deps/nghttp2/lib/includes/config.h
+++ node-git.8dae89b396/deps/nghttp2/lib/includes/config.h
@@ -71,7 +71,7 @@ typedef intptr_t ssize_t;
/* #undef HAVE_NETDB_H */
/* Define to 1 if you have the <netinet/in.h> header file. */
-/* #undef HAVE_NETINET_IN_H */
+#define HAVE_NETINET_IN_H 1
/* Define to 1 if you have the <pwd.h> header file. */
/* #undef HAVE_PWD_H */

79
node-gyp-addon-gypi.patch Normal file
View File

@ -0,0 +1,79 @@
Index: node-git.b4f0a18b5a/addon-rpm.gypi
===================================================================
--- /dev/null
+++ node-git.b4f0a18b5a/addon-rpm.gypi
@@ -0,0 +1,35 @@
+{
+ 'target_defaults': {
+ 'type': 'loadable_module',
+ 'product_prefix': '',
+ 'include_dirs': [
+ '/usr/include/node18/',
+ '/usr/include/'
+ ],
+
+ 'target_conditions': [
+ ['_type=="loadable_module"', {
+ 'product_extension': 'node',
+ 'defines': [ 'BUILDING_NODE_EXTENSION' ],
+ }]
+ ],
+
+ 'conditions': [
+ [ 'OS=="mac"', {
+ 'libraries': [ '-undefined dynamic_lookup' ],
+ 'xcode_settings': {
+ 'DYLIB_INSTALL_NAME_BASE': '@rpath'
+ },
+ }],
+ [ 'OS=="win"', {
+ 'libraries': [ '-l<(node_root_dir)/$(Configuration)/node.lib' ],
+ # warning C4251: 'node::ObjectWrap::handle_' : class 'v8::Persistent<T>'
+ # needs to have dll-interface to be used by clients of class 'node::ObjectWrap'
+ 'msvs_disabled_warnings': [ 4251 ],
+ }],
+ [ 'OS=="freebsd" or OS=="openbsd" or OS=="solaris" or (OS=="linux" and target_arch!="ia32")', {
+ 'cflags': [ '-fPIC' ],
+ }]
+ ]
+ }
+}
Index: node-git.b4f0a18b5a/deps/npm/node_modules/node-gyp/lib/configure.js
===================================================================
--- node-git.b4f0a18b5a.orig/deps/npm/node_modules/node-gyp/lib/configure.js
+++ node-git.b4f0a18b5a/deps/npm/node_modules/node-gyp/lib/configure.js
@@ -46,10 +46,6 @@ function configure (gyp, argv, callback)
if ('v' + release.version !== process.version) {
// if --target was given, then determine a target version to compile for
log.verbose('get node dir', 'compiling against --target node version: %s', release.version)
- } else {
- // if no --target was specified then use the current host node version
- log.verbose('get node dir', 'no --target version specified, falling back to host node version: %s', release.version)
- }
if (!release.semver) {
// could not parse the version string with semver
@@ -68,6 +64,12 @@ function configure (gyp, argv, callback)
nodeDir = path.resolve(gyp.devDir, release.versionDir)
createBuildDir()
})
+ } else {
+ // if no --target was specified then use RPM-installed headers
+ log.verbose('get node dir', 'no --target version specified, falling back to RPM installed headers')
+ nodeDir = '/usr/include/node18'
+ createBuildDir()
+ }
}
}
@@ -282,7 +284,9 @@ function configure (gyp, argv, callback)
// this logic ported from the old `gyp_addon` python file
var gypScript = path.resolve(__dirname, '..', 'gyp', 'gyp_main.py')
- var addonGypi = path.resolve(__dirname, '..', 'addon.gypi')
+ var addon_gypi_file = gyp.opts.target || gyp.opts.nodedir ? 'addon.gypi' : 'addon-rpm.gypi'
+
+ var addonGypi = path.resolve(__dirname, '..', addon_gypi_file)
var commonGypi = path.resolve(nodeDir, 'include/node/common.gypi')
fs.stat(commonGypi, function (err) {
if (err) {

3
node-gyp_7.1.2.tar.xz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f1c7a232727025211e2c80051c3d4a7b6984e19cc90c1f9943f1d03c05811a41
size 271084

3
node-v18.2.0.tar.xz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2305b15ebf5547474e905b5002f9ba99c7eeef01d7394dfe6f3846cc6bcad66d
size 36873192

BIN
node_modules.tar.xz (Stored with Git LFS) Normal file

Binary file not shown.

64
nodejs-libpath.patch Normal file
View File

@ -0,0 +1,64 @@
Index: node-v18.2.0/tools/install.py
===================================================================
--- node-v18.2.0.orig/tools/install.py
+++ node-v18.2.0/tools/install.py
@@ -7,6 +7,8 @@ import errno
import os
import shutil
import sys
+from distutils import sysconfig
+import re
# set at init time
node_prefix = '/usr/local' # PREFIX variable from Makefile
@@ -65,6 +67,10 @@ def try_copy(path, dst):
try_unlink(target_path) # prevent ETXTBSY errors
return shutil.copy2(source_path, target_path)
+def libdir():
+ libdir_fq = sysconfig.get_config_var("LIBDIR")
+ return re.sub("^" + re.escape(node_prefix + "/"), "", libdir_fq)
+
def try_remove(path, dst):
source_path, target_path = mkpaths(path, dst)
print('removing %s' % target_path)
@@ -80,7 +86,7 @@ def uninstall(paths, dst):
try_remove(path, dst)
def package_files(action, name, bins):
- target_path = 'lib/node_modules/' + name + '/'
+ target_path = libdir() + '/node_modules/' + name + '/'
# don't install npm if the target path is a symlink, it probably means
# that a dev version of npm is installed there
@@ -100,7 +106,7 @@ def package_files(action, name, bins):
if action == uninstall:
action([link_path], 'bin/' + bin_name)
elif action == install:
- try_symlink('../lib/node_modules/' + name + '/' + bin_target, link_path)
+ try_symlink('../' + libdir() + '/node_modules/' + name + '/' + bin_target, link_path)
else:
assert 0 # unhandled action type
@@ -145,7 +151,7 @@ def files(action):
output_lib = 'libnode.' + variables.get('shlib_suffix')
action([output_prefix + output_lib], 'lib/' + output_lib)
if 'true' == variables.get('node_use_dtrace'):
- action(['out/Release/node.d'], 'lib/dtrace/node.d')
+ action(['out/Release/node.d'], libdir() + '/dtrace/node.d')
# behave similarly for systemtap
action(['src/node.stp'], 'share/systemtap/tapset/')
Index: node-v18.2.0/lib/internal/modules/cjs/loader.js
===================================================================
--- node-v18.2.0.orig/lib/internal/modules/cjs/loader.js
+++ node-v18.2.0/lib/internal/modules/cjs/loader.js
@@ -1240,7 +1240,7 @@ Module._initPaths = function() {
path.resolve(process.execPath, '..') :
path.resolve(process.execPath, '..', '..');
- const paths = [path.resolve(prefixDir, 'lib', 'node')];
+ const paths = ['/usr/lib/node'];
if (homeDir) {
ArrayPrototypeUnshift(paths, path.resolve(homeDir, '.node_libraries'));

BIN
nodejs.keyring Normal file

Binary file not shown.

8
nodejs18.changes Normal file
View File

@ -0,0 +1,8 @@
-------------------------------------------------------------------
Thu May 19 15:01:09 UTC 2022 - Adam Majer <adam.majer@suse.de>
- Initial packaging of Nodejs 18.2.0. For detailed changes
since previous versions, see
https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V18.md#18.2.0

1029
nodejs18.spec Normal file

File diff suppressed because it is too large Load Diff

32
npm_search_paths.patch Normal file
View File

@ -0,0 +1,32 @@
Index: node-v18.2.0/deps/npm/lib/commands/help-search.js
===================================================================
--- node-v18.2.0.orig/deps/npm/lib/commands/help-search.js
+++ node-v18.2.0/deps/npm/lib/commands/help-search.js
@@ -20,7 +20,7 @@ class HelpSearch extends BaseCommand {
throw this.usageError()
}
- const docPath = path.resolve(__dirname, '..', '..', 'docs/content')
+ const docPath = '/usr/share/doc/packages/nodejs'
const files = await glob(`${globify(docPath)}/*/*.md`)
const data = await this.readFiles(files)
const results = await this.searchFiles(args, data, files)
Index: node-v18.2.0/deps/npm/lib/npm.js
===================================================================
--- node-v18.2.0.orig/deps/npm/lib/npm.js
+++ node-v18.2.0/deps/npm/lib/npm.js
@@ -383,7 +383,13 @@ class Npm extends EventEmitter {
}
get globalPrefix () {
- return this.config.globalPrefix
+ let prefix = this.config.globalPrefix
+
+ // don't poop all over distro territory - use /usr/local instead
+ if (prefix === '/usr')
+ return '/usr/local'
+
+ return prefix;
}
set globalPrefix (r) {

View File

@ -0,0 +1,42 @@
Allow non-standard openssl binary names
Index: node-v14.15.1/test/common/index.js
===================================================================
--- node-v14.15.1.orig/test/common/index.js
+++ node-v14.15.1/test/common/index.js
@@ -797,20 +797,28 @@ const common = {
get opensslCli() {
if (opensslCli !== null) return opensslCli;
+ let cli_candidates = [];
+
if (process.config.variables.node_shared_openssl) {
// Use external command
- opensslCli = 'openssl';
+ cli_candidates = cli_candidates.concat(['openssl-1_1', 'openssl']);
} else {
// Use command built from sources included in Node.js repository
- opensslCli = path.join(path.dirname(process.execPath), 'openssl-cli');
+ cli_candidates.push(path.join(path.dirname(process.execPath), 'openssl-cli'));
}
- if (exports.isWindows) opensslCli += '.exe';
+ let checkOpensslCli = function(opensslCli) {
+ if (exports.isWindows) opensslCli += '.exe';
+ const opensslCmd = spawnSync(opensslCli, ['version']);
+ if (opensslCmd.status !== 0 || opensslCmd.error !== undefined) {
+ // OpenSSL command cannot be executed
+ opensslCli = false;
+ }
+ return opensslCli;
+ };
- const opensslCmd = spawnSync(opensslCli, ['version']);
- if (opensslCmd.status !== 0 || opensslCmd.error !== undefined) {
- // OpenSSL command cannot be executed
- opensslCli = false;
+ for (let i=0; i<cli_candidates.length && !opensslCli; i=i+1) {
+ opensslCli = checkOpensslCli(cli_candidates[i]);
}
return opensslCli;
},

443
rsa-pss-revert.patch Normal file
View File

@ -0,0 +1,443 @@
Index: node-v17.3.0/doc/api/crypto.md
===================================================================
--- node-v17.3.0.orig/doc/api/crypto.md
+++ node-v17.3.0/doc/api/crypto.md
@@ -1959,20 +1959,11 @@ const {
<!-- YAML
added: v15.7.0
-changes:
- - version: v16.9.0
- pr-url: https://github.com/nodejs/node/pull/39851
- description: Expose `RSASSA-PSS-params` sequence parameters
- for RSA-PSS keys.
-->
* {Object}
* `modulusLength`: {number} Key size in bits (RSA, DSA).
* `publicExponent`: {bigint} Public exponent (RSA).
- * `hashAlgorithm`: {string} Name of the message digest (RSA-PSS).
- * `mgf1HashAlgorithm`: {string} Name of the message digest used by
- MGF1 (RSA-PSS).
- * `saltLength`: {number} Minimal salt length in bytes (RSA-PSS).
* `divisorLength`: {number} Size of `q` in bits (DSA).
* `namedCurve`: {string} Name of the curve (EC).
@@ -1981,11 +1972,8 @@ this object contains information about t
through this property can be used to uniquely identify a key or to compromise
the security of the key.
-For RSA-PSS keys, if the key material contains a `RSASSA-PSS-params` sequence,
-the `hashAlgorithm`, `mgf1HashAlgorithm`, and `saltLength` properties will be
-set.
-
-Other key details might be exposed via this API using additional attributes.
+RSA-PSS parameters, DH, or any future key type details might be exposed via this
+API using additional attributes.
### `keyObject.asymmetricKeyType`
Index: node-v17.3.0/src/crypto/crypto_rsa.cc
===================================================================
--- node-v17.3.0.orig/src/crypto/crypto_rsa.cc
+++ node-v17.3.0/src/crypto/crypto_rsa.cc
@@ -561,84 +561,10 @@ Maybe<bool> GetRsaKeyDetail(
reinterpret_cast<unsigned char*>(public_exponent.data());
CHECK_EQ(BN_bn2binpad(e, data, len), len);
- if (target
- ->Set(
- env->context(),
- env->public_exponent_string(),
- public_exponent.ToArrayBuffer())
- .IsNothing()) {
- return Nothing<bool>();
- }
-
- if (type == EVP_PKEY_RSA_PSS) {
- // Due to the way ASN.1 encoding works, default values are omitted when
- // encoding the data structure. However, there are also RSA-PSS keys for
- // which no parameters are set. In that case, the ASN.1 RSASSA-PSS-params
- // sequence will be missing entirely and RSA_get0_pss_params will return
- // nullptr. If parameters are present but all parameters are set to their
- // default values, an empty sequence will be stored in the ASN.1 structure.
- // In that case, RSA_get0_pss_params does not return nullptr but all fields
- // of the returned RSA_PSS_PARAMS will be set to nullptr.
-
- const RSA_PSS_PARAMS* params = RSA_get0_pss_params(rsa);
- if (params != nullptr) {
- int hash_nid = NID_sha1;
- int mgf_nid = NID_mgf1;
- int mgf1_hash_nid = NID_sha1;
- int64_t salt_length = 20;
-
- if (params->hashAlgorithm != nullptr) {
- hash_nid = OBJ_obj2nid(params->hashAlgorithm->algorithm);
- }
-
- if (target
- ->Set(
- env->context(),
- env->hash_algorithm_string(),
- OneByteString(env->isolate(), OBJ_nid2ln(hash_nid)))
- .IsNothing()) {
- return Nothing<bool>();
- }
-
- if (params->maskGenAlgorithm != nullptr) {
- mgf_nid = OBJ_obj2nid(params->maskGenAlgorithm->algorithm);
- if (mgf_nid == NID_mgf1) {
- mgf1_hash_nid = OBJ_obj2nid(params->maskHash->algorithm);
- }
- }
-
- // If, for some reason, the MGF is not MGF1, then the MGF1 hash function
- // is intentionally not added to the object.
- if (mgf_nid == NID_mgf1) {
- if (target
- ->Set(
- env->context(),
- env->mgf1_hash_algorithm_string(),
- OneByteString(env->isolate(), OBJ_nid2ln(mgf1_hash_nid)))
- .IsNothing()) {
- return Nothing<bool>();
- }
- }
-
- if (params->saltLength != nullptr) {
- if (ASN1_INTEGER_get_int64(&salt_length, params->saltLength) != 1) {
- ThrowCryptoError(env, ERR_get_error(), "ASN1_INTEGER_get_in64 error");
- return Nothing<bool>();
- }
- }
-
- if (target
- ->Set(
- env->context(),
- env->salt_length_string(),
- Number::New(env->isolate(), static_cast<double>(salt_length)))
- .IsNothing()) {
- return Nothing<bool>();
- }
- }
- }
-
- return Just<bool>(true);
+ return target->Set(
+ env->context(),
+ env->public_exponent_string(),
+ public_exponent.ToArrayBuffer());
}
namespace RSAAlg {
Index: node-v17.3.0/src/env.h
===================================================================
--- node-v17.3.0.orig/src/env.h
+++ node-v17.3.0/src/env.h
@@ -271,7 +271,6 @@ constexpr size_t kFsStatsBufferLength =
V(gid_string, "gid") \
V(h2_string, "h2") \
V(handle_string, "handle") \
- V(hash_algorithm_string, "hashAlgorithm") \
V(help_text_string, "helpText") \
V(homedir_string, "homedir") \
V(host_string, "host") \
@@ -320,7 +319,6 @@ constexpr size_t kFsStatsBufferLength =
V(message_port_string, "messagePort") \
V(message_string, "message") \
V(messageerror_string, "messageerror") \
- V(mgf1_hash_algorithm_string, "mgf1HashAlgorithm") \
V(minttl_string, "minttl") \
V(module_string, "module") \
V(modulus_string, "modulus") \
@@ -390,7 +388,6 @@ constexpr size_t kFsStatsBufferLength =
V(replacement_string, "replacement") \
V(require_string, "require") \
V(retry_string, "retry") \
- V(salt_length_string, "saltLength") \
V(scheme_string, "scheme") \
V(scopeid_string, "scopeid") \
V(serial_number_string, "serialNumber") \
Index: node-v17.3.0/test/fixtures/keys/Makefile
===================================================================
--- node-v17.3.0.orig/test/fixtures/keys/Makefile
+++ node-v17.3.0/test/fixtures/keys/Makefile
@@ -64,11 +64,9 @@ all: \
rsa_pss_private_2048.pem \
rsa_pss_private_2048_sha256_sha256_16.pem \
rsa_pss_private_2048_sha512_sha256_20.pem \
- rsa_pss_private_2048_sha1_sha1_20.pem \
rsa_pss_public_2048.pem \
rsa_pss_public_2048_sha256_sha256_16.pem \
rsa_pss_public_2048_sha512_sha256_20.pem \
- rsa_pss_public_2048_sha1_sha1_20.pem \
ed25519_private.pem \
ed25519_public.pem \
x25519_private.pem \
@@ -710,9 +708,6 @@ rsa_pss_private_2048_sha256_sha256_16.pe
rsa_pss_private_2048_sha512_sha256_20.pem:
openssl genpkey -algorithm RSA-PSS -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubexp:65537 -pkeyopt rsa_pss_keygen_md:sha512 -pkeyopt rsa_pss_keygen_mgf1_md:sha256 -pkeyopt rsa_pss_keygen_saltlen:20 -out rsa_pss_private_2048_sha512_sha256_20.pem
-rsa_pss_private_2048_sha1_sha1_20.pem:
- openssl genpkey -algorithm RSA-PSS -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubexp:65537 -pkeyopt rsa_pss_keygen_md:sha1 -pkeyopt rsa_pss_keygen_mgf1_md:sha1 -pkeyopt rsa_pss_keygen_saltlen:20 -out rsa_pss_private_2048_sha1_sha1_20.pem
-
rsa_pss_public_2048.pem: rsa_pss_private_2048.pem
openssl pkey -in rsa_pss_private_2048.pem -pubout -out rsa_pss_public_2048.pem
@@ -722,9 +717,6 @@ rsa_pss_public_2048_sha256_sha256_16.pem
rsa_pss_public_2048_sha512_sha256_20.pem: rsa_pss_private_2048_sha512_sha256_20.pem
openssl pkey -in rsa_pss_private_2048_sha512_sha256_20.pem -pubout -out rsa_pss_public_2048_sha512_sha256_20.pem
-rsa_pss_public_2048_sha1_sha1_20.pem: rsa_pss_private_2048_sha1_sha1_20.pem
- openssl pkey -in rsa_pss_private_2048_sha1_sha1_20.pem -pubout -out rsa_pss_public_2048_sha1_sha1_20.pem
-
ed25519_private.pem:
openssl genpkey -algorithm ED25519 -out ed25519_private.pem
Index: node-v17.3.0/test/fixtures/keys/rsa_pss_private_2048_sha1_sha1_20.pem
===================================================================
--- node-v17.3.0.orig/test/fixtures/keys/rsa_pss_private_2048_sha1_sha1_20.pem
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN PRIVATE KEY-----
-MIIEvQIBADANBgkqhkiG9w0BAQowAASCBKcwggSjAgEAAoIBAQCpdutzsPFQ1100
-ouR5aAwYry8aAtG0c+zX9UqNXGCpRDWzPPpXHUZSB1BmTTL4EhK2tkAfblYNqzRu
-CAYlKHbFpFLs2zLEorfp0WsFNPaBHE9JHpLIM4oXxPCUypZ7JAn56ZYonYCZ8Il5
-8SzD9aoF41RTEmpcx3XkL2RQa022RiSccYZKx/yzskUUAdTvTvYyujH1MkvsfVP+
-Ns5bRL6IVqowFd3xv6ctvfQMxz0rltgTC+wOm3CFtn+G63y6P/Z0U2DRdacsNkN6
-PFGXAIB0kSvKzs8gVocEBiSwMkcT/KD3R68PY18b2auqaGcm8gA+gaVJ36KAW4dO
-AjbY+YitAgMBAAECggEAfPvfFXln0Ra1gE+vMDdjzITPuWBg57Uj9fbMIEwEYnKT
-JHmRrNRDe9Y3HuxK7hjuQmFSE5xdzUD6rzgtyBP63TOfkV7tJ4dXGxS/2JxCPeDy
-PNxWp18Ttwoh4as0pudikDYN8DCRm3eC/TO5r2EtH6CVHZuUZI8bTMsDMiihrQ8F
-B8+KucBG5DDy/OlDeieAZxZA4Y0/c+W0DNZ/LIPGwaqMzYCSZJXyV0t33HytUwM2
-QZ+RbWqcUcrCI3lFAO8IyEULCi+RnSByZeJ0xwUkdQTI5jT6+G8BrO70Oiab8g+Q
-Rx2s7PxWpIMVS7/JD1PsL4hLrVh3uqh8PZl3/FG9IQKBgQDZWkOR2LA+ixmD6XJb
-Q+7zW2guHnK6wDrQFKmBGLaDdAER64WL1Unt6Umu7FPxth2niYMEgRexBgnj5hQN
-LfPYTiIeXs5ErrU96fVQABsV0Hra1M2Rhve5nynjFFpbHjDXtizzLpE30MsC7YkN
-EqD4YYzjWHrbk/UlQ7tx3eAvtQKBgQDHmNM4TRuyH2yaYxDqnho6fgJv7Z4KgbM0
-1wcUxi5kPDQsFtaVOzFhNserzsWvotQjLkC2+CK5qlCdm59ZlpUqszF6+YyUs5Gq
-WmHdqryduT1VxSV/pd6wGEQo27fxFV7LsT1JhVMh9Iri8MK0b1BD6+kVUf5NcKDB
-Od2o8A1gGQKBgA5Y3Pj1mrymJesFL91CYLWDpR7WN7CIG9m8Y2v4G6QVtjRenZQb
-YiPoMErxoqDj6pUyiIl1lADFa0W13ED6dYwjrDDhBTCXb7NEjELZnvATsOhc/6zJ
-gfSowvUQVN6K4aJ7jgAHZOKQT7ZDw7YvMpzyo4AmSQXRgG8TR34+rRu5AoGACApP
-9+SjSPmbFl0HQWw9Aj4xOvEHfMTcwzQmRN/23nLOZzhETJ6lzpS2VmVt8TVN9lzW
-nohAXdpOhQrP0HwQZjfxtlJ3J0ZUh9g8OQG3t2LO5bWbXRkBb3aKyFqRflSuDOaG
-4X9NagC/14R7U2loglPuf71d0SDIWQBLvZJt94ECgYEAnY7aKHnWdLszcB8uyEkJ
-EJkUEaa+K/nTqOzqffZ01cTWJmUG7a2KuvQ+UQM2BHk2+wBmUo45Iz/dyePOJY0B
-Fu2agiV4+R4z2XVQnIvXgY5HaPxvLz0THksY/pD58gBmFaLMx4ADEwQ+s4Y2g12H
-ABsKNRHfSnKTwOm/dYvcVqs=
------END PRIVATE KEY-----
Index: node-v17.3.0/test/fixtures/keys/rsa_pss_public_2048_sha1_sha1_20.pem
===================================================================
--- node-v17.3.0.orig/test/fixtures/keys/rsa_pss_public_2048_sha1_sha1_20.pem
+++ /dev/null
@@ -1,9 +0,0 @@
------BEGIN PUBLIC KEY-----
-MIIBIjANBgkqhkiG9w0BAQowAAOCAQ8AMIIBCgKCAQEAqXbrc7DxUNddNKLkeWgM
-GK8vGgLRtHPs1/VKjVxgqUQ1szz6Vx1GUgdQZk0y+BIStrZAH25WDas0bggGJSh2
-xaRS7NsyxKK36dFrBTT2gRxPSR6SyDOKF8TwlMqWeyQJ+emWKJ2AmfCJefEsw/Wq
-BeNUUxJqXMd15C9kUGtNtkYknHGGSsf8s7JFFAHU7072Mrox9TJL7H1T/jbOW0S+
-iFaqMBXd8b+nLb30DMc9K5bYEwvsDptwhbZ/hut8uj/2dFNg0XWnLDZDejxRlwCA
-dJErys7PIFaHBAYksDJHE/yg90evD2NfG9mrqmhnJvIAPoGlSd+igFuHTgI22PmI
-rQIDAQAB
------END PUBLIC KEY-----
Index: node-v17.3.0/test/parallel/test-crypto-key-objects.js
===================================================================
--- node-v17.3.0.orig/test/parallel/test-crypto-key-objects.js
+++ node-v17.3.0/test/parallel/test-crypto-key-objects.js
@@ -582,21 +582,11 @@ const privateDsa = fixtures.readKey('dsa
const publicKey = createPublicKey(publicPem);
const privateKey = createPrivateKey(privatePem);
- // Because no RSASSA-PSS-params appears in the PEM, no defaults should be
- // added for the PSS parameters. This is different from an empty
- // RSASSA-PSS-params sequence (see test below).
- const expectedKeyDetails = {
- modulusLength: 2048,
- publicExponent: 65537n
- };
-
assert.strictEqual(publicKey.type, 'public');
assert.strictEqual(publicKey.asymmetricKeyType, 'rsa-pss');
- assert.deepStrictEqual(publicKey.asymmetricKeyDetails, expectedKeyDetails);
assert.strictEqual(privateKey.type, 'private');
assert.strictEqual(privateKey.asymmetricKeyType, 'rsa-pss');
- assert.deepStrictEqual(privateKey.asymmetricKeyDetails, expectedKeyDetails);
assert.throws(
() => publicKey.export({ format: 'jwk' }),
@@ -635,38 +625,6 @@ const privateDsa = fixtures.readKey('dsa
}
{
- // This key pair enforces sha1 as the message digest and the MGF1
- // message digest and a salt length of 20 bytes.
-
- const publicPem = fixtures.readKey('rsa_pss_public_2048_sha1_sha1_20.pem');
- const privatePem =
- fixtures.readKey('rsa_pss_private_2048_sha1_sha1_20.pem');
-
- const publicKey = createPublicKey(publicPem);
- const privateKey = createPrivateKey(privatePem);
-
- // Unlike the previous key pair, this key pair contains an RSASSA-PSS-params
- // sequence. However, because all values in the RSASSA-PSS-params are set to
- // their defaults (see RFC 3447), the ASN.1 structure contains an empty
- // sequence. Node.js should add the default values to the key details.
- const expectedKeyDetails = {
- modulusLength: 2048,
- publicExponent: 65537n,
- hashAlgorithm: 'sha1',
- mgf1HashAlgorithm: 'sha1',
- saltLength: 20
- };
-
- assert.strictEqual(publicKey.type, 'public');
- assert.strictEqual(publicKey.asymmetricKeyType, 'rsa-pss');
- assert.deepStrictEqual(publicKey.asymmetricKeyDetails, expectedKeyDetails);
-
- assert.strictEqual(privateKey.type, 'private');
- assert.strictEqual(privateKey.asymmetricKeyType, 'rsa-pss');
- assert.deepStrictEqual(privateKey.asymmetricKeyDetails, expectedKeyDetails);
- }
-
- {
// This key pair enforces sha256 as the message digest and the MGF1
// message digest and a salt length of at least 16 bytes.
const publicPem =
@@ -724,21 +682,11 @@ const privateDsa = fixtures.readKey('dsa
const publicKey = createPublicKey(publicPem);
const privateKey = createPrivateKey(privatePem);
- const expectedKeyDetails = {
- modulusLength: 2048,
- publicExponent: 65537n,
- hashAlgorithm: 'sha512',
- mgf1HashAlgorithm: 'sha256',
- saltLength: 20
- };
-
assert.strictEqual(publicKey.type, 'public');
assert.strictEqual(publicKey.asymmetricKeyType, 'rsa-pss');
- assert.deepStrictEqual(publicKey.asymmetricKeyDetails, expectedKeyDetails);
assert.strictEqual(privateKey.type, 'private');
assert.strictEqual(privateKey.asymmetricKeyType, 'rsa-pss');
- assert.deepStrictEqual(privateKey.asymmetricKeyDetails, expectedKeyDetails);
// Node.js usually uses the same hash function for the message and for MGF1.
// However, when a different MGF1 message digest algorithm has been
Index: node-v17.3.0/test/parallel/test-crypto-keygen.js
===================================================================
--- node-v17.3.0.orig/test/parallel/test-crypto-keygen.js
+++ node-v17.3.0/test/parallel/test-crypto-keygen.js
@@ -309,20 +309,14 @@ const sec1EncExp = (cipher) => getRegExp
assert.strictEqual(publicKey.asymmetricKeyType, 'rsa-pss');
assert.deepStrictEqual(publicKey.asymmetricKeyDetails, {
modulusLength: 512,
- publicExponent: 65537n,
- hashAlgorithm: 'sha256',
- mgf1HashAlgorithm: 'sha256',
- saltLength: 16
+ publicExponent: 65537n
});
assert.strictEqual(privateKey.type, 'private');
assert.strictEqual(privateKey.asymmetricKeyType, 'rsa-pss');
assert.deepStrictEqual(privateKey.asymmetricKeyDetails, {
modulusLength: 512,
- publicExponent: 65537n,
- hashAlgorithm: 'sha256',
- mgf1HashAlgorithm: 'sha256',
- saltLength: 16
+ publicExponent: 65537n
});
// Unlike RSA, RSA-PSS does not allow encryption.
@@ -381,10 +375,7 @@ const sec1EncExp = (cipher) => getRegExp
}, common.mustSucceed((publicKey, privateKey) => {
const expectedKeyDetails = {
modulusLength: 512,
- publicExponent: 65537n,
- hashAlgorithm: 'sha256',
- mgf1HashAlgorithm: 'sha256',
- saltLength: 16
+ publicExponent: 65537n
};
assert.deepStrictEqual(publicKey.asymmetricKeyDetails, expectedKeyDetails);
assert.deepStrictEqual(privateKey.asymmetricKeyDetails, expectedKeyDetails);
@@ -401,10 +392,7 @@ const sec1EncExp = (cipher) => getRegExp
}, common.mustSucceed((publicKey, privateKey) => {
const expectedKeyDetails = {
modulusLength: 512,
- publicExponent: 65537n,
- hashAlgorithm: 'sha512',
- mgf1HashAlgorithm: 'sha512',
- saltLength: 64
+ publicExponent: 65537n
};
assert.deepStrictEqual(publicKey.asymmetricKeyDetails, expectedKeyDetails);
assert.deepStrictEqual(privateKey.asymmetricKeyDetails, expectedKeyDetails);
@@ -418,10 +406,7 @@ const sec1EncExp = (cipher) => getRegExp
}, common.mustSucceed((publicKey, privateKey) => {
const expectedKeyDetails = {
modulusLength: 512,
- publicExponent: 65537n,
- hashAlgorithm: 'sha512',
- mgf1HashAlgorithm: 'sha512',
- saltLength: 0
+ publicExponent: 65537n
};
assert.deepStrictEqual(publicKey.asymmetricKeyDetails, expectedKeyDetails);
assert.deepStrictEqual(privateKey.asymmetricKeyDetails, expectedKeyDetails);
@@ -1646,20 +1631,14 @@ if (!common.hasOpenSSL3) {
assert.strictEqual(publicKey.asymmetricKeyType, 'rsa-pss');
assert.deepStrictEqual(publicKey.asymmetricKeyDetails, {
modulusLength: 512,
- publicExponent: 65537n,
- hashAlgorithm: 'sha256',
- mgf1HashAlgorithm: 'sha256',
- saltLength: 16
+ publicExponent: 65537n
});
assert.strictEqual(privateKey.type, 'private');
assert.strictEqual(privateKey.asymmetricKeyType, 'rsa-pss');
assert.deepStrictEqual(privateKey.asymmetricKeyDetails, {
modulusLength: 512,
- publicExponent: 65537n,
- hashAlgorithm: 'sha256',
- mgf1HashAlgorithm: 'sha256',
- saltLength: 16
+ publicExponent: 65537n
});
}));
}
Index: node-v17.3.0/test/parallel/test-crypto-keygen-deprecation.js
===================================================================
--- node-v17.3.0.orig/test/parallel/test-crypto-keygen-deprecation.js
+++ node-v17.3.0/test/parallel/test-crypto-keygen-deprecation.js
@@ -32,20 +32,14 @@ const { generateKeyPair } = require('cry
assert.strictEqual(publicKey.asymmetricKeyType, 'rsa-pss');
assert.deepStrictEqual(publicKey.asymmetricKeyDetails, {
modulusLength: 512,
- publicExponent: 65537n,
- hashAlgorithm: 'sha256',
- mgf1HashAlgorithm: 'sha256',
- saltLength: 16
+ publicExponent: 65537n
});
assert.strictEqual(privateKey.type, 'private');
assert.strictEqual(privateKey.asymmetricKeyType, 'rsa-pss');
assert.deepStrictEqual(privateKey.asymmetricKeyDetails, {
modulusLength: 512,
- publicExponent: 65537n,
- hashAlgorithm: 'sha256',
- mgf1HashAlgorithm: 'sha256',
- saltLength: 16
+ publicExponent: 65537n
});
}));
}

29
skip_no_console.patch Normal file
View File

@ -0,0 +1,29 @@
Index: node-v14.3.0/test/parallel/test-repl-mode.js
===================================================================
--- node-v14.3.0.orig/test/parallel/test-repl-mode.js
+++ node-v14.3.0/test/parallel/test-repl-mode.js
@@ -1,9 +1,11 @@
'use strict';
-require('../common');
+const common = require('../common');
const assert = require('assert');
const Stream = require('stream');
const repl = require('repl');
+common.skipIfDumbTerminal();
+
const tests = [
testSloppyMode,
testStrictMode,
Index: node-v14.3.0/test/parallel/test-repl-strict-mode-previews.js
===================================================================
--- node-v14.3.0.orig/test/parallel/test-repl-strict-mode-previews.js
+++ node-v14.3.0/test/parallel/test-repl-strict-mode-previews.js
@@ -5,6 +5,7 @@
const common = require('../common');
common.skipIfInspectorDisabled();
+common.skipIfDumbTerminal();
if (process.argv[2] === 'child') {
const stream = require('stream');

View File

@ -0,0 +1,35 @@
Index: node-v16.13.0/configure
===================================================================
--- node-v16.13.0.orig/configure
+++ node-v16.13.0/configure
@@ -22,7 +22,7 @@ except ImportError:
from distutils.spawn import find_executable as which
print('Node.js configure: Found Python {}.{}.{}...'.format(*sys.version_info))
-acceptable_pythons = ((3, 10), (3, 9), (3, 8), (3, 7), (3, 6))
+acceptable_pythons = ((3, 10), (3, 9), (3, 8), (3, 7), (3, 6), (3, 4))
if sys.version_info[:2] in acceptable_pythons:
import configure
else:
Index: node-v16.13.0/deps/npm/node_modules/node-gyp/lib/find-python.js
===================================================================
--- node-v16.13.0.orig/deps/npm/node_modules/node-gyp/lib/find-python.js
+++ node-v16.13.0/deps/npm/node_modules/node-gyp/lib/find-python.js
@@ -15,7 +15,7 @@ const programFiles = process.env.Program
const programFilesX86 = process.env['ProgramFiles(x86)'] || `${programFiles} (x86)`
const winDefaultLocationsArray = []
-for (const majorMinor of ['39', '38', '37', '36']) {
+for (const majorMinor of ['39', '38', '37', '36', '34']) {
if (foundLocalAppData) {
winDefaultLocationsArray.push(
`${localAppData}\\Programs\\Python\\Python${majorMinor}\\python.exe`,
@@ -49,7 +49,7 @@ PythonFinder.prototype = {
log: logWithPrefix(log, 'find Python'),
argsExecutable: ['-c', 'import sys; print(sys.executable);'],
argsVersion: ['-c', 'import sys; print("%s.%s.%s" % sys.version_info[:3]);'],
- semverRange: '>=3.6.0',
+ semverRange: '>=3.4.0',
// These can be overridden for testing:
execFile: cp.execFile,

View File

@ -0,0 +1,42 @@
Skip 'test/parallel/test-fs-utimes-y2K38.js' on some platforms.
This test fails if coreutils' touch was built with 64-bit time_t,
while nodejs was built with 32-bit time_t. This is currently the case
on i586, ppc and armv7l. Skip the failing last command on those
platforms.
The failure was seen since coreutils-9.0.
Remove this patch once nodejs(1) also builds with 64-bit time_t.
---
test/parallel/test-fs-utimes-y2K38.js | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
Index: node-v16.6.2/test/parallel/test-fs-utimes-y2K38.js
===================================================================
--- node-v16.6.2.orig/test/parallel/test-fs-utimes-y2K38.js
+++ node-v16.6.2/test/parallel/test-fs-utimes-y2K38.js
@@ -20,6 +20,23 @@ if (!common.isWindows) {
common.skip('File system appears to lack Y2K38 support (touch failed)');
}
+ // SUSE: touch-9.0 may succeed on platforms with 32-bit time_t,
+ // but the test would fail. Skip on those platforms for now.
+ const unameResult = spawnSync('uname',
+ ['-m'],
+ { encoding: 'utf8' });
+ if (unameResult.status === 0) {
+ if (unameResult.stdout.trim() === 'i686') {
+ common.skip('SUSE: test skipped on platforms with 32-bit time_t');
+ }
+ if (unameResult.stdout.trim() === 'ppc') {
+ common.skip('SUSE: test skipped on platforms with 32-bit time_t');
+ }
+ if (unameResult.stdout.trim() === 'armv7l') {
+ common.skip('SUSE: test skipped on platforms with 32-bit time_t');
+ }
+ }
+
// On some file systems that lack Y2K38 support, `touch` will succeed but
// the time will be incorrect.
const dateResult = spawnSync('date',

13
update_npm_tarball.sh Normal file
View File

@ -0,0 +1,13 @@
#!/bin/bash
#
# Fetch npm module tarball that is required to run unit tests
# which are not provided by upstream tarball
#
set -e
tar Jxf node-v*.tar.xz
cd node-v.*/tools/doc
npm ci
cd ../..
exec tar Jcf ../node_modules.tar.xz tools/doc/node_modules

518
versioned.patch Normal file
View File

@ -0,0 +1,518 @@
Author: Adam Majer <amajer@suse.de>
Date: Fri May 11 16:10:16 CEST 2018
Summary: Generate versioned binaries
Generate versioned binaries and install paths
so we can allow concurrent installations and
management via update_alternatives.
This is also important for generation of binary
modules for multiple versions of NodeJS
Index: node-v18.2.0/Makefile
===================================================================
--- node-v18.2.0.orig/Makefile
+++ node-v18.2.0/Makefile
@@ -55,7 +55,7 @@ BUILDTYPE_LOWER := $(shell echo $(BUILDT
EXEEXT := $(shell $(PYTHON) -c \
"import sys; print('.exe' if sys.platform == 'win32' else '')")
-NODE_EXE = node$(EXEEXT)
+NODE_EXE = node18$(EXEEXT)
NODE ?= ./$(NODE_EXE)
NODE_G_EXE = node_g$(EXEEXT)
NPM ?= ./deps/npm/bin/npm-cli.js
Index: node-v18.2.0/tools/install.py
===================================================================
--- node-v18.2.0.orig/tools/install.py
+++ node-v18.2.0/tools/install.py
@@ -86,7 +86,7 @@ def uninstall(paths, dst):
try_remove(path, dst)
def package_files(action, name, bins):
- target_path = libdir() + '/node_modules/' + name + '/'
+ target_path = libdir() + '/node_modules/' + name + '18/'
# don't install npm if the target path is a symlink, it probably means
# that a dev version of npm is installed there
@@ -106,19 +106,19 @@ def package_files(action, name, bins):
if action == uninstall:
action([link_path], 'bin/' + bin_name)
elif action == install:
- try_symlink('../' + libdir() + '/node_modules/' + name + '/' + bin_target, link_path)
+ try_symlink('../' + libdir() + '/node_modules/' + name + '18/' + bin_target, link_path)
else:
assert 0 # unhandled action type
def npm_files(action):
package_files(action, 'npm', {
- 'npm': 'bin/npm-cli.js',
- 'npx': 'bin/npx-cli.js',
+ 'npm18': 'bin/npm-cli.js',
+ 'npx18': 'bin/npx-cli.js',
})
def corepack_files(action):
package_files(action, 'corepack', {
- 'corepack': 'dist/corepack.js',
+ 'corepack18': 'dist/corepack.js',
# Not the default just yet:
# 'yarn': 'dist/yarn.js',
# 'yarnpkg': 'dist/yarn.js',
@@ -136,7 +136,7 @@ def subdir_files(path, dest, action):
def files(action):
is_windows = sys.platform == 'win32'
- output_file = 'node'
+ output_file = 'node18'
output_prefix = 'out/Release/'
if is_windows:
@@ -154,7 +154,7 @@ def files(action):
action(['out/Release/node.d'], libdir() + '/dtrace/node.d')
# behave similarly for systemtap
- action(['src/node.stp'], 'share/systemtap/tapset/')
+ action(['src/node.stp'], 'share/systemtap/tapset/node18.stp')
action(['deps/v8/tools/gdbinit'], 'share/doc/node/')
action(['deps/v8/tools/lldb_commands.py'], 'share/doc/node/')
@@ -162,7 +162,7 @@ def files(action):
if 'freebsd' in sys.platform or 'openbsd' in sys.platform:
action(['doc/node.1'], 'man/man1/')
else:
- action(['doc/node.1'], 'share/man/man1/')
+ action(['doc/node.1'], 'share/man/man1/node18.1')
if 'true' == variables.get('node_install_npm'):
npm_files(action)
@@ -249,28 +249,28 @@ def headers(action):
'src/node_buffer.h',
'src/node_object_wrap.h',
'src/node_version.h',
- ], 'include/node/')
+ ], 'include/node18/')
# Add the expfile that is created on AIX
if sys.platform.startswith('aix'):
- action(['out/Release/node.exp'], 'include/node/')
+ action(['out/Release/node.exp'], 'include/node18/')
- subdir_files('deps/v8/include', 'include/node/', wanted_v8_headers)
+ subdir_files('deps/v8/include', 'include/node18/', wanted_v8_headers)
if 'false' == variables.get('node_shared_libuv'):
- subdir_files('deps/uv/include', 'include/node/', action)
+ subdir_files('deps/uv/include', 'include/node18/', action)
if 'true' == variables.get('node_use_openssl') and \
'false' == variables.get('node_shared_openssl'):
- subdir_files('deps/openssl/openssl/include/openssl', 'include/node/openssl/', action)
- subdir_files('deps/openssl/config/archs', 'include/node/openssl/archs', action)
- subdir_files('deps/openssl/config', 'include/node/openssl', action)
+ subdir_files('deps/openssl/openssl/include/openssl', 'include/node18/openssl/', action)
+ subdir_files('deps/openssl/config/archs', 'include/node18/openssl/archs', action)
+ subdir_files('deps/openssl/config', 'include/node18/openssl', action)
if 'false' == variables.get('node_shared_zlib'):
action([
'deps/zlib/zconf.h',
'deps/zlib/zlib.h',
- ], 'include/node/')
+ ], 'include/node18/')
if sys.platform == 'zos':
zoslibinc = os.environ.get('ZOSLIB_INCLUDES')
Index: node-v18.2.0/doc/node.1
===================================================================
--- node-v18.2.0.orig/doc/node.1
+++ node-v18.2.0/doc/node.1
@@ -30,24 +30,24 @@
.Dt NODE 1
.
.Sh NAME
-.Nm node
+.Nm node18
.Nd server-side JavaScript runtime
.
.\"======================================================================
.Sh SYNOPSIS
-.Nm node
+.Nm node18
.Op Ar options
.Op Ar v8-options
.Op Fl e Ar string | Ar script.js | Fl
.Op Fl -
.Op Ar arguments ...
.
-.Nm node
+.Nm node18
.Cm inspect
.Op Fl e Ar string | Ar script.js | Fl | Ar <host>:<port>
.Ar ...
.
-.Nm node
+.Nm node18
.Op Fl -v8-options
.
.\"======================================================================
Index: node-v18.2.0/src/node.stp
===================================================================
--- node-v18.2.0.orig/src/node.stp
+++ node-v18.2.0/src/node.stp
@@ -19,7 +19,7 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
-probe node_net_server_connection = process("node").mark("net__server__connection")
+probe node_net_server_connection = process("node18").mark("net__server__connection")
{
remote = user_string($arg2);
port = $arg3;
@@ -32,7 +32,7 @@ probe node_net_server_connection = proce
fd);
}
-probe node_net_stream_end = process("node").mark("net__stream__end")
+probe node_net_stream_end = process("node18").mark("net__stream__end")
{
remote = user_string($arg2);
port = $arg3;
@@ -45,7 +45,7 @@ probe node_net_stream_end = process("nod
fd);
}
-probe node_http_server_request = process("node").mark("http__server__request")
+probe node_http_server_request = process("node18").mark("http__server__request")
{
remote = user_string($arg3);
port = $arg4;
@@ -62,7 +62,7 @@ probe node_http_server_request = process
fd);
}
-probe node_http_server_response = process("node").mark("http__server__response")
+probe node_http_server_response = process("node18").mark("http__server__response")
{
remote = user_string($arg2);
port = $arg3;
@@ -75,7 +75,7 @@ probe node_http_server_response = proces
fd);
}
-probe node_http_client_request = process("node").mark("http__client__request")
+probe node_http_client_request = process("node18").mark("http__client__request")
{
remote = user_string($arg3);
port = $arg4;
@@ -92,7 +92,7 @@ probe node_http_client_request = process
fd);
}
-probe node_http_client_response = process("node").mark("http__client__response")
+probe node_http_client_response = process("node18").mark("http__client__response")
{
remote = user_string($arg2);
port = $arg3;
@@ -105,7 +105,7 @@ probe node_http_client_response = proces
fd);
}
-probe node_gc_start = process("node").mark("gc__start")
+probe node_gc_start = process("node18").mark("gc__start")
{
scavenge = 1 << 0;
compact = 1 << 1;
@@ -125,7 +125,7 @@ probe node_gc_start = process("node").ma
flags);
}
-probe node_gc_stop = process("node").mark("gc__done")
+probe node_gc_stop = process("node18").mark("gc__done")
{
scavenge = 1 << 0;
compact = 1 << 1;
Index: node-v18.2.0/deps/npm/man/man1/npm.1
===================================================================
--- node-v18.2.0.orig/deps/npm/man/man1/npm.1
+++ node-v18.2.0/deps/npm/man/man1/npm.1
@@ -1,6 +1,6 @@
.TH "NPM" "1" "May 2022" "" ""
.SH "NAME"
-\fBnpm\fR \- javascript package manager
+\fBnpm18\fR \- javascript package manager
.SS Synopsis
.SS Version
.P
@@ -15,7 +15,7 @@ It is extremely configurable to support
commonly, you use it to publish, discover, install, and develop node
programs\.
.P
-Run \fBnpm help\fP to get a list of available commands\.
+Run \fBnpm18 help\fP to get a list of available commands\.
.SS Important
.P
npm comes preconfigured to use npm's public registry at
@@ -31,14 +31,14 @@ their terms of use\.
You probably got npm because you want to install stuff\.
.P
The very first thing you will most likely want to run in any node
-program is \fBnpm install\fP to install its dependencies\.
+program is \fBnpm18 install\fP to install its dependencies\.
.P
-You can also run \fBnpm install blerg\fP to install the latest version of
+You can also run \fBnpm18 install blerg\fP to install the latest version of
"blerg"\. Check out npm help \fBinstall\fP for more
info\. It can do a lot of stuff\.
.P
-Use the \fBnpm search\fP command to show everything that's available in the
-public registry\. Use \fBnpm ls\fP to show everything you've installed\.
+Use the \fBnpm18 search\fP command to show everything that's available in the
+public registry\. Use \fBnpm18 ls\fP to show everything you've installed\.
.SS Dependencies
.P
If a package lists a dependency using a git URL, npm will install that
@@ -87,7 +87,7 @@ npm help \fBpackage\.json\fP\|\.
.IP \(bu 2
link:
Links your current working code into Node's path, so that you don't
-have to reinstall every time you make a change\. Use npm help \fBnpm
+have to reinstall every time you make a change\. Use npm help \fBnpm18
link\fP to do this\.
.IP \(bu 2
install:
@@ -170,18 +170,18 @@ https://github\.com/npm/rfcs
.SS See Also
.RS 0
.IP \(bu 2
-npm help help
+npm18 help help
.IP \(bu 2
-npm help package\.json
+npm18 help package\.json
.IP \(bu 2
-npm help npmrc
+npm18 help npmrc
.IP \(bu 2
-npm help config
+npm18 help config
.IP \(bu 2
-npm help install
+npm18 help install
.IP \(bu 2
-npm help prefix
+npm18 help prefix
.IP \(bu 2
-npm help publish
+npm18 help publish
.RE
Index: node-v18.2.0/src/node_main.cc
===================================================================
--- node-v18.2.0.orig/src/node_main.cc
+++ node-v18.2.0/src/node_main.cc
@@ -122,6 +122,7 @@ int main(int argc, char* argv[]) {
#endif
// Disable stdio buffering, it interacts poorly with printf()
// calls elsewhere in the program (e.g., any logging from V8.)
+ setenv("NODE_VERSION", "18", 0);
setvbuf(stdout, nullptr, _IONBF, 0);
setvbuf(stderr, nullptr, _IONBF, 0);
return node::Start(argc, argv);
Index: node-v18.2.0/tools/test.py
===================================================================
--- node-v18.2.0.orig/tools/test.py
+++ node-v18.2.0/tools/test.py
@@ -935,7 +935,7 @@ class Context(object):
if self.vm is not None:
return self.vm
if arch == 'none':
- name = 'out/Debug/node' if mode == 'debug' else 'out/Release/node'
+ name = 'out/Debug/node' if mode == 'debug' else 'out/Release/node18'
else:
name = 'out/%s.%s/node' % (arch, mode)
Index: node-v18.2.0/node.gyp
===================================================================
--- node-v18.2.0.orig/node.gyp
+++ node-v18.2.0/node.gyp
@@ -24,8 +24,8 @@
'node_use_openssl%': 'true',
'node_shared_openssl%': 'false',
'node_v8_options%': '',
- 'node_core_target_name%': 'node',
- 'node_lib_target_name%': 'libnode',
+ 'node_core_target_name%': 'node18',
+ 'node_lib_target_name%': 'libnode18',
'node_intermediate_lib_type%': 'static_library',
'node_builtin_modules_path%': '',
# We list the deps/ files out instead of globbing them in js2c.py since we
Index: node-v18.2.0/deps/npm/man/man1/npx.1
===================================================================
--- node-v18.2.0.orig/deps/npm/man/man1/npx.1
+++ node-v18.2.0/deps/npm/man/man1/npx.1
@@ -5,10 +5,10 @@
.P
.RS 2
.nf
-npx \-\- <pkg>[@<version>] [args\.\.\.]
-npx \-\-package=<pkg>[@<version>] \-\- <cmd> [args\.\.\.]
-npx \-c '<cmd> [args\.\.\.]'
-npx \-\-package=foo \-c '<cmd> [args\.\.\.]'
+npx18 \-\- <pkg>[@<version>] [args\.\.\.]
+npx18 \-\-package=<pkg>[@<version>] \-\- <cmd> [args\.\.\.]
+npx18 \-c '<cmd> [args\.\.\.]'
+npx18 \-\-package=foo \-c '<cmd> [args\.\.\.]'
.fi
.RE
.SS Description
@@ -57,9 +57,9 @@ no bin entries, or none of them match th
To run a binary \fIother than\fR the named binary, specify one or more
\fB\-\-package\fP options, which will prevent npm from inferring the package from
the first command argument\.
-.SS \fBnpx\fP vs \fBnpm exec\fP
+.SS \fBnpx18\fP vs \fBnpm exec\fP
.P
-When run via the \fBnpx\fP binary, all flags and options \fImust\fR be set prior to
+When run via the \fBnpx18\fP binary, all flags and options \fImust\fR be set prior to
any positional arguments\. When run via \fBnpm exec\fP, a double\-hyphen \fB\-\-\fP
flag can be used to suppress npm's parsing of switches and options that
should be sent to the executed command\.
@@ -68,7 +68,7 @@ For example:
.P
.RS 2
.nf
-$ npx foo@latest bar \-\-package=@npmcli/foo
+$ npx18 foo@latest bar \-\-package=@npmcli/foo
.fi
.RE
.P
@@ -89,7 +89,7 @@ different:
.P
.RS 2
.nf
-$ npm exec foo@latest bar \-\-package=@npmcli/foo
+$ npm18 exec foo@latest bar \-\-package=@npmcli/foo
.fi
.RE
.P
@@ -105,11 +105,11 @@ $ foo@latest bar
.P
The double\-hyphen character is recommended to explicitly tell npm to stop
parsing command line options and switches\. The following command would
-thus be equivalent to the \fBnpx\fP command above:
+thus be equivalent to the \fBnpx18\fP command above:
.P
.RS 2
.nf
-$ npm exec \-\- foo@latest bar \-\-package=@npmcli/foo
+$ npm18 exec \-\- foo@latest bar \-\-package=@npmcli/foo
.fi
.RE
.SS Examples
@@ -119,8 +119,8 @@ arguments:
.P
.RS 2
.nf
-$ npm exec \-\- tap \-\-bail test/foo\.js
-$ npx tap \-\-bail test/foo\.js
+$ npm18 exec \-\- tap \-\-bail test/foo\.js
+$ npx18 tap \-\-bail test/foo\.js
.fi
.RE
.P
@@ -129,9 +129,9 @@ by specifying a \fB\-\-package\fP option
.P
.RS 2
.nf
-$ npm exec \-\-package=foo \-\- bar \-\-bar\-argument
+$ npm18 exec \-\-package=foo \-\- bar \-\-bar\-argument
# ~ or ~
-$ npx \-\-package=foo bar \-\-bar\-argument
+$ npx18 \-\-package=foo bar \-\-bar\-argument
.fi
.RE
.P
@@ -139,14 +139,14 @@ Run an arbitrary shell script, in the co
.P
.RS 2
.nf
-$ npm x \-c 'eslint && say "hooray, lint passed"'
-$ npx \-c 'eslint && say "hooray, lint passed"'
+$ npm18 x \-c 'eslint && say "hooray, lint passed"'
+$ npx18 \-c 'eslint && say "hooray, lint passed"'
.fi
.RE
.SS Compatibility with Older npx Versions
.P
-The \fBnpx\fP binary was rewritten in npm v7\.0\.0, and the standalone \fBnpx\fP
-package deprecated at that time\. \fBnpx\fP uses the \fBnpm exec\fP
+The \fBnpx18\fP binary was rewritten in npm v7\.0\.0, and the standalone \fBnpx18\fP
+package deprecated at that time\. \fBnpx18\fP uses the \fBnpm18 exec\fP
command instead of a separate argument parser and install process, with
some affordances to maintain backwards compatibility with the arguments it
accepted in previous versions\.
@@ -154,10 +154,10 @@ accepted in previous versions\.
This resulted in some shifts in its functionality:
.RS 0
.IP \(bu 2
-Any \fBnpm\fP config value may be provided\.
+Any \fBnpm18\fP config value may be provided\.
.IP \(bu 2
To prevent security and user\-experience problems from mistyping package
-names, \fBnpx\fP prompts before installing anything\. Suppress this
+names, \fBnpx18\fP prompts before installing anything\. Suppress this
prompt with the \fB\-y\fP or \fB\-\-yes\fP option\.
.IP \(bu 2
The \fB\-\-no\-install\fP option is deprecated, and will be converted to \fB\-\-no\fP\|\.
@@ -165,13 +165,13 @@ The \fB\-\-no\-install\fP option is depr
Shell fallback functionality is removed, as it is not advisable\.
.IP \(bu 2
The \fB\-p\fP argument is a shorthand for \fB\-\-parseable\fP in npm, but shorthand
-for \fB\-\-package\fP in npx\. This is maintained, but only for the \fBnpx\fP
+for \fB\-\-package\fP in npx\. This is maintained, but only for the \fBnpx18\fP
executable\.
.IP \(bu 2
The \fB\-\-ignore\-existing\fP option is removed\. Locally installed bins are
always present in the executed process \fBPATH\fP\|\.
.IP \(bu 2
-The \fB\-\-npm\fP option is removed\. \fBnpx\fP will always use the \fBnpm\fP it ships
+The \fB\-\-npm18\fP option is removed\. \fBnpx18\fP will always use the \fBnpm18\fP it ships
with\.
.IP \(bu 2
The \fB\-\-node\-arg\fP and \fB\-n\fP options are removed\.
@@ -179,26 +179,26 @@ The \fB\-\-node\-arg\fP and \fB\-n\fP op
The \fB\-\-always\-spawn\fP option is redundant, and thus removed\.
.IP \(bu 2
The \fB\-\-shell\fP option is replaced with \fB\-\-script\-shell\fP, but maintained
-in the \fBnpx\fP executable for backwards compatibility\.
+in the \fBnpx18\fP executable for backwards compatibility\.
.RE
.SS See Also
.RS 0
.IP \(bu 2
-npm help run\-script
+npm18 help run\-script
.IP \(bu 2
-npm help scripts
+npm18 help scripts
.IP \(bu 2
-npm help test
+npm18 help test
.IP \(bu 2
-npm help start
+npm18 help start
.IP \(bu 2
-npm help restart
+npm18 help restart
.IP \(bu 2
-npm help stop
+npm18 help stop
.IP \(bu 2
-npm help config
+npm18 help config
.IP \(bu 2
-npm help exec
+npm18 help exec
.RE