File tree Expand file tree Collapse file tree 3 files changed +56
-0
lines changed Expand file tree Collapse file tree 3 files changed +56
-0
lines changed Original file line number Diff line number Diff line change @@ -2922,6 +2922,10 @@ void BindingData::LegacyMainResolve(const FunctionCallbackInfo<Value>& args) {
29222922
29232923 for (int i = 0 ; i < legacy_main_extensions_with_main_end; i++) {
29242924 file_path = *initial_file_path + std::string (legacy_main_extensions[i]);
2925+ // TODO: Remove ifdef after path.toNamespacedPath logic is ported to C++
2926+ #ifdef _WIN32
2927+ file_path = " \\\\ ?\\ " + file_path;
2928+ #endif
29252929
29262930 switch (FilePathIsFile (env, file_path)) {
29272931 case BindingData::FilePathIsFileReturnType::kIsFile :
@@ -2959,6 +2963,10 @@ void BindingData::LegacyMainResolve(const FunctionCallbackInfo<Value>& args) {
29592963 i < legacy_main_extensions_package_fallback_end;
29602964 i++) {
29612965 file_path = *initial_file_path + std::string (legacy_main_extensions[i]);
2966+ // TODO: Remove ifdef after path.toNamespacedPath logic is ported to C++
2967+ #ifdef _WIN32
2968+ file_path = " \\\\ ?\\ " + file_path;
2969+ #endif
29622970
29632971 switch (FilePathIsFile (env, file_path)) {
29642972 case BindingData::FilePathIsFileReturnType::kIsFile :
Original file line number Diff line number Diff line change @@ -256,8 +256,14 @@ void BindingData::ReadPackageJSON(const FunctionCallbackInfo<Value>& args) {
256256 permission::PermissionScope::kFileSystemRead ,
257257 path.ToStringView ());
258258
259+ // TODO: Remove ifdef after path.toNamespacedPath logic is ported to C++
260+ #ifdef _WIN32
261+ auto package_json = GetPackageJSON (
262+ realm, " \\\\ ?\\ " + path.ToString (), is_esm ? &error_context : nullptr );
263+ #else
259264 auto package_json =
260265 GetPackageJSON (realm, path.ToString (), is_esm ? &error_context : nullptr );
266+ #endif
261267 if (package_json == nullptr ) {
262268 return ;
263269 }
Original file line number Diff line number Diff line change 1+ 'use strict' ;
2+
3+ // Flags: --expose-internals
4+
5+ const common = require ( '../common' ) ;
6+ if ( ! common . isWindows ) {
7+ common . skip ( 'this test is Windows-specific.' ) ;
8+ }
9+
10+ const fs = require ( 'fs' ) ;
11+ const path = require ( 'path' ) ;
12+ const tmpdir = require ( '../common/tmpdir' ) ;
13+
14+ // https://github.com/nodejs/node/issues/50753
15+ // Make a path that is more than 260 chars long.
16+ // Module layout will be the following:
17+ // package.json
18+ // main
19+ // main.js
20+
21+ const packageDirNameLen = Math . max ( 260 - tmpdir . path . length , 1 ) ;
22+ const packageDirName = tmpdir . resolve ( 'x' . repeat ( packageDirNameLen ) ) ;
23+ const packageDirPath = path . resolve ( packageDirName ) ;
24+ const packageJsonFilePath = path . join ( packageDirPath , 'package.json' ) ;
25+ const mainDirName = 'main' ;
26+ const mainDirPath = path . resolve ( packageDirPath , mainDirName ) ;
27+ const mainJsFile = 'main.js' ;
28+ const mainJsFilePath = path . resolve ( mainDirPath , mainJsFile ) ;
29+
30+ tmpdir . refresh ( ) ;
31+
32+ fs . mkdirSync ( packageDirPath ) ;
33+ fs . writeFileSync (
34+ packageJsonFilePath ,
35+ `{"main":"${ mainDirName } /${ mainJsFile } "}`
36+ ) ;
37+ fs . mkdirSync ( mainDirPath ) ;
38+ fs . writeFileSync ( mainJsFilePath , 'console.log("hello world");' ) ;
39+
40+ require ( 'internal/modules/run_main' ) . executeUserEntryPoint ( packageDirPath ) ;
41+
42+ tmpdir . refresh ( ) ;
You can’t perform that action at this time.
0 commit comments