(packageInfo *packagejson.InfoCacheEntry, ext extensions, subpath string)
| 667 | } |
| 668 | |
| 669 | func (r *resolutionState) loadModuleFromExports(packageInfo *packagejson.InfoCacheEntry, ext extensions, subpath string) *resolved { |
| 670 | // !!! This is ported exactly, but the falsy check seems wrong |
| 671 | if !packageInfo.Exists() || packageInfo.Contents.Exports.IsFalsy() { |
| 672 | return continueSearching() |
| 673 | } |
| 674 | |
| 675 | if subpath == "." { |
| 676 | var mainExport packagejson.ExportsOrImports |
| 677 | switch packageInfo.Contents.Exports.Type { |
| 678 | case packagejson.JSONValueTypeString, packagejson.JSONValueTypeArray: |
| 679 | mainExport = packageInfo.Contents.Exports |
| 680 | case packagejson.JSONValueTypeObject: |
| 681 | if packageInfo.Contents.Exports.IsConditions() { |
| 682 | mainExport = packageInfo.Contents.Exports |
| 683 | } else if dot, ok := packageInfo.Contents.Exports.AsObject().Get("."); ok { |
| 684 | mainExport = dot |
| 685 | } |
| 686 | } |
| 687 | if mainExport.Type != packagejson.JSONValueTypeNotPresent { |
| 688 | return r.loadModuleFromTargetExportOrImport(ext, subpath, packageInfo, false /*isImports*/, mainExport, "", false /*isPattern*/, ".") |
| 689 | } |
| 690 | } else if packageInfo.Contents.Exports.Type == packagejson.JSONValueTypeObject && packageInfo.Contents.Exports.IsSubpaths() { |
| 691 | if result := r.loadModuleFromExportsOrImports(ext, subpath, packageInfo.Contents.Exports.AsObject(), packageInfo, false /*isImports*/); !result.shouldContinueSearching() { |
| 692 | return result |
| 693 | } |
| 694 | } |
| 695 | |
| 696 | if r.tracer != nil { |
| 697 | r.tracer.write(diagnostics.Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1, subpath, packageInfo.PackageDirectory) |
| 698 | } |
| 699 | return continueSearching() |
| 700 | } |
| 701 | |
| 702 | func (r *resolutionState) loadModuleFromExportsOrImports( |
| 703 | extensions extensions, |
no test coverage detected