56 lines
1.4 KiB
JavaScript
56 lines
1.4 KiB
JavaScript
|
// Manually “tree shaken” from:
|
||
|
// <https://github.com/nodejs/node/blob/45f5c9b/lib/internal/modules/esm/package_config.js>
|
||
|
// Last checked on: Nov 2, 2023.
|
||
|
|
||
|
/**
|
||
|
* @typedef {import('./package-json-reader.js').PackageConfig} PackageConfig
|
||
|
*/
|
||
|
|
||
|
import {URL, fileURLToPath} from 'node:url'
|
||
|
import packageJsonReader from './package-json-reader.js'
|
||
|
|
||
|
/**
|
||
|
* @param {URL | string} resolved
|
||
|
* @returns {PackageConfig}
|
||
|
*/
|
||
|
export function getPackageScopeConfig(resolved) {
|
||
|
let packageJSONUrl = new URL('package.json', resolved)
|
||
|
|
||
|
while (true) {
|
||
|
const packageJSONPath = packageJSONUrl.pathname
|
||
|
if (packageJSONPath.endsWith('node_modules/package.json')) {
|
||
|
break
|
||
|
}
|
||
|
|
||
|
const packageConfig = packageJsonReader.read(
|
||
|
fileURLToPath(packageJSONUrl),
|
||
|
{specifier: resolved}
|
||
|
)
|
||
|
|
||
|
if (packageConfig.exists) {
|
||
|
return packageConfig
|
||
|
}
|
||
|
|
||
|
const lastPackageJSONUrl = packageJSONUrl
|
||
|
packageJSONUrl = new URL('../package.json', packageJSONUrl)
|
||
|
|
||
|
// Terminates at root where ../package.json equals ../../package.json
|
||
|
// (can't just check "/package.json" for Windows support).
|
||
|
if (packageJSONUrl.pathname === lastPackageJSONUrl.pathname) {
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const packageJSONPath = fileURLToPath(packageJSONUrl)
|
||
|
|
||
|
return {
|
||
|
pjsonPath: packageJSONPath,
|
||
|
exists: false,
|
||
|
main: undefined,
|
||
|
name: undefined,
|
||
|
type: 'none',
|
||
|
exports: undefined,
|
||
|
imports: undefined
|
||
|
}
|
||
|
}
|