Skip to content

Commit 242c032

Browse files
author
Loïc Mangeonjean
committed
fix: fix resolving and respect external rollup option
1 parent aadcbea commit 242c032

File tree

1 file changed

+25
-14
lines changed

1 file changed

+25
-14
lines changed

packages/rollup-plugin-import-meta-assets/src/rollup-plugin-import-meta-assets.js

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -161,21 +161,35 @@ ${` default: return new Promise(function(resolve, reject) {
161161
if (importMetaUrlType === 'static') {
162162
const absoluteScriptDir = path.dirname(id);
163163
const relativeAssetPath = getRelativeAssetPath(node);
164-
const absoluteAssetPath = path.resolve(absoluteScriptDir, relativeAssetPath);
165-
const assetName = path.basename(absoluteAssetPath);
166164

167165
try {
168-
const assetContents = await fs.promises.readFile(absoluteAssetPath);
166+
const resolved = await this.resolve(relativeAssetPath, id);
167+
if (resolved == null) {
168+
// Do not process directories, just skip
169+
const absoluteAssetPath = path.resolve(absoluteScriptDir, relativeAssetPath);
170+
try {
171+
if (fs.lstatSync(absoluteAssetPath).isDirectory()) {
172+
return;
173+
}
174+
} catch (error) {
175+
// ignore, the file probably doesn't exists
176+
}
177+
this.error(`Unable to resolve "${relativeAssetPath}" from "${id}"`);
178+
return;
179+
}
180+
if (resolved.external) {
181+
return;
182+
}
183+
184+
const assetContents = await fs.promises.readFile(resolved.id);
169185
const transformedAssetContents =
170-
transform != null
171-
? await transform(assetContents, absoluteAssetPath)
172-
: assetContents;
186+
transform != null ? await transform(assetContents, resolved.id) : assetContents;
173187
if (transformedAssetContents === null) {
174188
return;
175189
}
176190
const ref = this.emitFile({
177191
type: 'asset',
178-
name: assetName,
192+
name: path.basename(resolved.id),
179193
source: transformedAssetContents,
180194
});
181195
magicString.overwrite(
@@ -185,13 +199,10 @@ ${` default: return new Promise(function(resolve, reject) {
185199
);
186200
modifiedCode = true;
187201
} catch (error) {
188-
// Do not process directories, just skip
189-
if (error.code !== 'EISDIR') {
190-
if (warnOnError) {
191-
this.warn(error, node.arguments[0].start);
192-
} else {
193-
this.error(error, node.arguments[0].start);
194-
}
202+
if (warnOnError) {
203+
this.warn(error, node.arguments[0].start);
204+
} else {
205+
this.error(error, node.arguments[0].start);
195206
}
196207
}
197208
}

0 commit comments

Comments
 (0)