@@ -80,7 +80,7 @@ class NodePackageImporter extends Importer {
8080 )
8181 case var resolved? ) {
8282 if (_validExtensions.contains (p.extension (resolved))) {
83- return p.toUri (p.canonicalize (resolved));
83+ return p.toUri (p.canonicalize (_resolveImportOnly ( resolved) ));
8484 } else {
8585 throw "The export for '${subpath ?? "root" }' in "
8686 "'$packageName ' resolved to '${resolved .toString ()}', "
@@ -144,18 +144,18 @@ class NodePackageImporter extends Importer {
144144 ) {
145145 if (packageManifest['sass' ] case String sassValue
146146 when _validExtensions.contains (p.url.extension (sassValue))) {
147- return p.join (packageRoot, sassValue);
147+ return _resolveImportOnly ( p.join (packageRoot, sassValue) );
148148 } else if (packageManifest['style' ] case String styleValue
149149 when _validExtensions.contains (p.url.extension (styleValue))) {
150- return p.join (packageRoot, styleValue);
150+ return _resolveImportOnly ( p.join (packageRoot, styleValue) );
151151 }
152152
153153 var result = resolveImportPath (p.join (packageRoot, 'index' ));
154154 return result;
155155 }
156156
157157 /// Returns a file path specified by a `subpath` in the `exports` section of
158- /// package.json .
158+ /// `packageManifest` .
159159 ///
160160 /// `packageName` is used for error reporting.
161161 String ? _resolvePackageExports (
@@ -285,6 +285,16 @@ class NodePackageImporter extends Importer {
285285 };
286286 }
287287
288+ /// Returns either [path] or, if necessary, the import-only variant that
289+ /// should be loaded instead.
290+ String _resolveImportOnly (String path) {
291+ if (! fromImport) return path;
292+ var extension = p.extension (path);
293+ assert (_validExtensions.contains (extension ));
294+ var importOnly = '${p .withoutExtension (path )}.import$extension ' ;
295+ return fileExists (importOnly) ? importOnly : path;
296+ }
297+
288298 /// Implementation of the `PATTERN_KEY_COMPARE` comparator from
289299 /// https://nodejs.org/api/esm.html#resolution-algorithm-specification.
290300 int _compareExpansionKeys (String keyA, String keyB) {
0 commit comments