asyncresolve(request) {
request = awaitthis.beforeResolve(request);
if (request.resolvedTo) {
return request.resolvedTo;
}
let resolution = await request.defaultResolve();
switch (resolution.type) {
case'found':
return resolution;
case'not_found':
break;
}
let nextRequest = awaitthis.fallbackResolve(request);
if (nextRequest === request) {
// no additional fallback is available.return resolution;
}
// do some other post-fallback stuff
}
Embroider's Before Resolve
private asyncbeforeResolve(request) {
request = awaitthis.handleGlobalsCompat(request);
request = this.handleImplicitModules(request);
request = this.handleImplicitTestScripts(request);
request = this.handleVendorStyles(request);
request = this.handleTestSupportStyles(request);
request = this.handleEntrypoint(request);
request = this.handleRouteEntrypoint(request);
request = this.handleRenaming(request);
request = this.handleVendor(request);
request = this.preHandleExternal(request);
// this should probably stay the last step in beforeResolve, because it can// rehome requests to their un-rewritten locations, and for the most part we// want to be dealing with the rewritten packages.
request = this.handleRewrittenPackages(request);
return request;
}
handleRewrittenPackages()
private handleRewrittenPackages(request) {
let requestingPkg = this.packageCache.ownerOfFile(request.fromFile);
if (!requestingPkg) {
return request;
}
let packageName = getPackageName(request.specifier);
if (!packageName) {
// relative requestreturn request;
}
let targetPkg;
if (packageName !== requestingPkg.name) {
// non-relative, non-self request, so check if it aims at a rewritten addontry {
targetPkg = this.packageCache.resolve(packageName, requestingPkg);
} catch (err) {
if (err.code !== 'MODULE_NOT_FOUND') {
throw err;
}
}
}
let originalRequestingPkg = this.packageCache.original(requestingPkg);
let originalTargetPkg = targetPkg ? this.packageCache.original(targetPkg) : undefined;
if (targetPkg && originalTargetPkg !== targetPkg) {
// in this case it doesn't matter whether or not the requesting package// was moved. RewrittenPackageCache.resolve already took care of finding// the right target, and we redirect the request so it will look inside// that target.returnlogTransition(
'request targets a moved package',
request,
this.resolveWithinMovedPackage(request, targetPkg)
);
} elseif (originalRequestingPkg !== requestingPkg) {
if (targetPkg) {
// in this case, the requesting package is moved but its destination is// not, so we need to rehome the request back to the original location.returnlogTransition(
'outbound request from moved package',
request,
request
// setting meta here because if this fails, we want the fallback// logic to revert our rehome and continue from the *moved* package.
.withMeta({ originalFromFile: request.fromFile })
.rehome(resolve(originalRequestingPkg.root, 'package.json'))
);
} else {
// requesting package was moved and we failed to find its target. We// can't let that accidentally succeed in the defaultResolve because we// could escape the moved package system.returnlogTransition('missing outbound request from moved package', request, request.notFound());
}
}
return request;
}
private handleRewrittenPackages(request) {
let requestingPkg = this.packageCache.ownerOfFile(request.fromFile);
if (!requestingPkg) {
return request;
}
let packageName = getPackageName(request.specifier);
if (!packageName) {
// relative requestreturn request;
}
let targetPkg;
if (packageName !== requestingPkg.name) {
// non-relative, non-self request, so check if it aims at a rewritten addontry {
targetPkg = this.packageCache.resolve(packageName, requestingPkg);
} catch (err) {
if (err.code !== 'MODULE_NOT_FOUND') {
throw err;
}
}
}
...
}
Targeting Rewritten
private handleRewrittenPackages(request) {
let requestingPkg, packageName, targetPkg; // see previous slideslet originalRequestingPkg = this.packageCache.original(requestingPkg);
let originalTargetPkg = targetPkg ? this.packageCache.original(targetPkg) : undefined;
if (targetPkg && originalTargetPkg !== targetPkg) {
// in this case it doesn't matter whether or not the requesting package// was moved. RewrittenPackageCache.resolve already took care of finding// the right target, and we redirect the request so it will look inside// that target.returnlogTransition(
'request targets a moved package',
request,
this.resolveWithinMovedPackage(request, targetPkg)
);
}
...
}
private handleRewrittenPackages(request) {
let requestingPkg, packageName, targetPkg; // see previous slideslet originalRequestingPkg, originalTargetPkg; // see previous slidesif (originalRequestingPkg !== requestingPkg) {
if (targetPkg) {
// in this case, the requesting package is moved but its destination is// not, so we need to rehome the request back to the original location.returnlogTransition(
'outbound request from moved package',
request,
request
// setting meta here because if this fails, we want the fallback// logic to revert our rehome and continue from the *moved* package.
.withMeta({ originalFromFile: request.fromFile })
.rehome(resolve(originalRequestingPkg.root, 'package.json'))
);
} else {
// requesting package was moved and we failed to find its target. We// can't let that accidentally succeed in the defaultResolve because we// could escape the moved package system.returnlogTransition('missing outbound request from moved package', request, request.notFound());
}
}
return request;
}
Thank you all!
@real_ate@mastodon.social
twitch.tv/real_ate
real_ate
github.com/mansona
Ember's journey to build with Vite Build your Ember apps with the magic of Vite Chris Manson - @real_ate@mastodon.social