-
Notifications
You must be signed in to change notification settings - Fork 29.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
4c730ae
commit 42b88bf
Showing
6 changed files
with
249 additions
and
66 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,189 @@ | ||
'use strict'; | ||
|
||
// Flags: --expose-internals | ||
|
||
const common = require('../common'); | ||
if (!common.isWindows) { | ||
common.skip('this test is Windows-specific.'); | ||
} | ||
|
||
const fs = require('fs'); | ||
const path = require('path'); | ||
const tmpdir = require('../common/tmpdir'); | ||
const { describe, it } = require('node:test'); | ||
const { legacyMainResolve } = require('node:internal/modules/esm/resolve'); | ||
const { pathToFileURL } = require('node:url'); | ||
const { spawnPromisified } = require('../common'); | ||
const assert = require('assert'); | ||
const { execPath } = require('node:process'); | ||
|
||
describe('long path on Windows', () => { | ||
it('check long path in ReadPackageJSON', () => { | ||
// Module layout will be the following: | ||
// package.json | ||
// main | ||
// main.js | ||
const packageDirNameLen = Math.max(260 - tmpdir.path.length, 1); | ||
const packageDirName = tmpdir.resolve('x'.repeat(packageDirNameLen)); | ||
const packageDirPath = path.resolve(packageDirName); | ||
const packageJsonFilePath = path.join(packageDirPath, 'package.json'); | ||
const mainDirName = 'main'; | ||
const mainDirPath = path.resolve(packageDirPath, mainDirName); | ||
const mainJsFile = 'main.js'; | ||
const mainJsFilePath = path.resolve(mainDirPath, mainJsFile); | ||
|
||
tmpdir.refresh(); | ||
|
||
fs.mkdirSync(packageDirPath); | ||
fs.writeFileSync( | ||
packageJsonFilePath, | ||
`{"main":"${mainDirName}/${mainJsFile}"}` | ||
); | ||
fs.mkdirSync(mainDirPath); | ||
fs.writeFileSync(mainJsFilePath, 'console.log("hello world");'); | ||
|
||
require('internal/modules/run_main').executeUserEntryPoint(packageDirPath); | ||
|
||
tmpdir.refresh(); | ||
}); | ||
|
||
it('check long path in LegacyMainResolve - 1', () => { | ||
// Module layout will be the following: | ||
// package.json | ||
// index.js | ||
const packageDirNameLen = Math.max(260 - tmpdir.path.length, 1); | ||
const packageDirPath = tmpdir.resolve('y'.repeat(packageDirNameLen)); | ||
const packageJSPath = path.join(packageDirPath, 'package.json'); | ||
const indexJSPath = path.join(packageDirPath, 'index.js'); | ||
const packageConfig = { }; | ||
|
||
tmpdir.refresh(); | ||
|
||
fs.mkdirSync(packageDirPath); | ||
fs.writeFileSync(packageJSPath, ''); | ||
fs.writeFileSync(indexJSPath, ''); | ||
|
||
const packageJsonUrl = pathToFileURL( | ||
path.resolve(packageJSPath) | ||
); | ||
|
||
console.log(legacyMainResolve(packageJsonUrl, packageConfig, '')); | ||
}); | ||
|
||
it('check long path in LegacyMainResolve - 2', () => { | ||
// Module layout will be the following: | ||
// package.json | ||
// main.js | ||
const packageDirNameLen = Math.max(260 - tmpdir.path.length, 1); | ||
const packageDirPath = tmpdir.resolve('z'.repeat(packageDirNameLen)); | ||
const packageJSPath = path.join(packageDirPath, 'package.json'); | ||
const indexJSPath = path.join(packageDirPath, 'main.js'); | ||
const packageConfig = { main: 'main.js' }; | ||
|
||
tmpdir.refresh(); | ||
|
||
fs.mkdirSync(packageDirPath); | ||
fs.writeFileSync(packageJSPath, ''); | ||
fs.writeFileSync(indexJSPath, ''); | ||
|
||
const packageJsonUrl = pathToFileURL( | ||
path.resolve(packageJSPath) | ||
); | ||
|
||
console.log(legacyMainResolve(packageJsonUrl, packageConfig, '')); | ||
}); | ||
|
||
it('check long path in GetNearestParentPackageJSON', async () => { | ||
// Module layout will be the following: | ||
// node_modules | ||
// test-module | ||
// package.json (path is less than 260 chars long) | ||
// cjs | ||
// package.json (path is more than 260 chars long) | ||
// index.js | ||
const testModuleDirPath = 'node_modules/test-module'; | ||
let cjsDirPath = path.join(testModuleDirPath, 'cjs'); | ||
let modulePackageJSPath = path.join(testModuleDirPath, 'package.json'); | ||
let cjsPackageJSPath = path.join(cjsDirPath, 'package.json'); | ||
let cjsIndexJSPath = path.join(cjsDirPath, 'index.js'); | ||
|
||
const tmpDirNameLen = Math.max( | ||
260 - tmpdir.path.length - cjsPackageJSPath.length, 1); | ||
const tmpDirPath = tmpdir.resolve('k'.repeat(tmpDirNameLen)); | ||
|
||
cjsDirPath = path.join(tmpDirPath, cjsDirPath); | ||
modulePackageJSPath = path.join(tmpDirPath, modulePackageJSPath); | ||
cjsPackageJSPath = path.join(tmpDirPath, cjsPackageJSPath); | ||
cjsIndexJSPath = path.join(tmpDirPath, cjsIndexJSPath); | ||
|
||
tmpdir.refresh(); | ||
|
||
fs.mkdirSync(cjsDirPath, { recursive: true }); | ||
fs.writeFileSync( | ||
modulePackageJSPath, | ||
`{ | ||
"type": "module" | ||
}` | ||
); | ||
fs.writeFileSync( | ||
cjsPackageJSPath, | ||
`{ | ||
"type": "commonjs" | ||
}` | ||
); | ||
fs.writeFileSync( | ||
cjsIndexJSPath, | ||
'const fs = require("fs");' | ||
); | ||
const { code, signal, stderr } = await spawnPromisified(execPath, [cjsIndexJSPath]); | ||
assert.strictEqual(stderr.trim(), ''); | ||
assert.strictEqual(code, 0); | ||
assert.strictEqual(signal, null); | ||
}); | ||
|
||
it('check long path in GetNearestParentPackageJSONType', async () => { | ||
// Module layout will be the following: | ||
// node_modules | ||
// test-module | ||
// package.json (path is less than 260 chars long) | ||
// cjs | ||
// package.json (path is more than 260 chars long) | ||
// index.js | ||
const testModuleDirPath = 'node_modules/test-module'; | ||
let cjsDirPath = path.join(testModuleDirPath, 'cjs'); | ||
let modulePackageJSPath = path.join(testModuleDirPath, 'package.json'); | ||
let cjsPackageJSPath = path.join(cjsDirPath, 'package.json'); | ||
let cjsIndexJSPath = path.join(cjsDirPath, 'index.js'); | ||
|
||
const tmpDirNameLen = Math.max(260 - tmpdir.path.length - cjsPackageJSPath.length, 1); | ||
const tmpDirPath = tmpdir.resolve('l'.repeat(tmpDirNameLen)); | ||
|
||
cjsDirPath = path.join(tmpDirPath, cjsDirPath); | ||
modulePackageJSPath = path.join(tmpDirPath, modulePackageJSPath); | ||
cjsPackageJSPath = path.join(tmpDirPath, cjsPackageJSPath); | ||
cjsIndexJSPath = path.join(tmpDirPath, cjsIndexJSPath); | ||
|
||
tmpdir.refresh(); | ||
|
||
fs.mkdirSync(cjsDirPath, { recursive: true }); | ||
fs.writeFileSync( | ||
modulePackageJSPath, | ||
`{ | ||
"type": "module" | ||
}` | ||
); | ||
fs.writeFileSync( | ||
cjsPackageJSPath, | ||
`{ | ||
"type": "commonjs" | ||
}` | ||
); | ||
|
||
fs.writeFileSync(cjsIndexJSPath, 'import fs from "node:fs/promises";'); | ||
const { code, signal, stderr } = await spawnPromisified(execPath, [cjsIndexJSPath]); | ||
|
||
assert.ok(stderr.includes('Warning: To load an ES module')); | ||
assert.strictEqual(code, 1); | ||
assert.strictEqual(signal, null); | ||
}); | ||
}); |