* Resolves the package target string to a URL object. * @param {string} target - The target string to resolve. * @param {string} subpath - The subpath to append to the resolved URL. * @param {RegExpMatchArray} match - The matched string array from the import statement. * @param {string} packageJ
( target, subpath, match, packageJSONUrl, base, pattern, internal, isPathMap, conditions, )
| 375 | * @throws {ERR_INVALID_SUBPATH} - If the subpath is invalid. |
| 376 | */ |
| 377 | function resolvePackageTargetString( |
| 378 | target, |
| 379 | subpath, |
| 380 | match, |
| 381 | packageJSONUrl, |
| 382 | base, |
| 383 | pattern, |
| 384 | internal, |
| 385 | isPathMap, |
| 386 | conditions, |
| 387 | ) { |
| 388 | |
| 389 | if (subpath !== '' && !pattern && target[target.length - 1] !== '/') { |
| 390 | throw invalidPackageTarget(match, target, packageJSONUrl, internal, base); |
| 391 | } |
| 392 | |
| 393 | if (!StringPrototypeStartsWith(target, './')) { |
| 394 | if (internal && |
| 395 | target[0] !== '/' && |
| 396 | !StringPrototypeStartsWith(target, '../')) { |
| 397 | // No need to convert target to string, since it's already presumed to be |
| 398 | if (!URLCanParse(target)) { |
| 399 | const exportTarget = pattern ? |
| 400 | RegExpPrototypeSymbolReplace(patternRegEx, target, () => subpath) : |
| 401 | target + subpath; |
| 402 | return packageResolve( |
| 403 | exportTarget, packageJSONUrl, conditions); |
| 404 | } |
| 405 | } |
| 406 | throw invalidPackageTarget(match, target, packageJSONUrl, internal, base); |
| 407 | } |
| 408 | |
| 409 | if (RegExpPrototypeExec(invalidSegmentRegEx, StringPrototypeSlice(target, 2)) !== null) { |
| 410 | if (RegExpPrototypeExec(deprecatedInvalidSegmentRegEx, StringPrototypeSlice(target, 2)) === null) { |
| 411 | if (!isPathMap) { |
| 412 | const request = pattern ? |
| 413 | StringPrototypeReplace(match, '*', () => subpath) : |
| 414 | match + subpath; |
| 415 | const resolvedTarget = pattern ? |
| 416 | RegExpPrototypeSymbolReplace(patternRegEx, target, () => subpath) : |
| 417 | target; |
| 418 | emitInvalidSegmentDeprecation(resolvedTarget, request, match, packageJSONUrl, internal, base, true); |
| 419 | } |
| 420 | } else { |
| 421 | throw invalidPackageTarget(match, target, packageJSONUrl, internal, base); |
| 422 | } |
| 423 | } |
| 424 | |
| 425 | const resolved = new URL(target, packageJSONUrl); |
| 426 | const resolvedPath = resolved.pathname; |
| 427 | const packagePath = new URL('.', packageJSONUrl).pathname; |
| 428 | |
| 429 | if (!StringPrototypeStartsWith(resolvedPath, packagePath)) { |
| 430 | throw invalidPackageTarget(match, target, packageJSONUrl, internal, base); |
| 431 | } |
| 432 | |
| 433 | if (subpath === '') { return resolved; } |
| 434 |
no test coverage detected
searching dependent graphs…