fune/js/loader/ResolveResult.h
Jon Coppeard 3e69adc940 Bug 1777450 - Separate error messages for module resulution failure when the specifier might be bare r=allstarschh,flod
This fixes the original case by adding an extra error reason which is used when
the specifier could be bare and and only warning about relative URLs in this
case.

The same problem happens with import maps enable where "./foo.js" produces an
error about it being a bare specifier, which it's not. For that case make
ParseURLLikeImportSpecifier return a ResolveResult and use the same approach.

Differential Revision: https://phabricator.services.mozilla.com/D151153
2022-07-08 09:58:33 +00:00

54 lines
1.7 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef js_loader_ResolveResult_h
#define js_loader_ResolveResult_h
#include "mozilla/ResultVariant.h"
#include "mozilla/NotNull.h"
#include "nsIURI.h"
namespace JS::loader {
enum class ResolveError : uint8_t {
Failure,
FailureMayBeBare,
BlockedByNullEntry,
BlockedByAfterPrefix,
BlockedByBacktrackingPrefix,
InvalidBareSpecifier
};
struct ResolveErrorInfo {
static const char* GetString(ResolveError aError) {
switch (aError) {
case ResolveError::Failure:
return "ModuleResolveFailureNoWarn";
case ResolveError::FailureMayBeBare:
return "ModuleResolveFailureWarnRelative";
case ResolveError::BlockedByNullEntry:
return "ImportMapResolutionBlockedByNullEntry";
case ResolveError::BlockedByAfterPrefix:
return "ImportMapResolutionBlockedByAfterPrefix";
case ResolveError::BlockedByBacktrackingPrefix:
return "ImportMapResolutionBlockedByBacktrackingPrefix";
case ResolveError::InvalidBareSpecifier:
return "ImportMapResolveInvalidBareSpecifierWarnRelative";
default:
MOZ_CRASH("Unexpected ResolveError value");
}
}
};
/**
* ResolveResult is used to store the result of 'resolving a module specifier',
* which could be an URI on success or a ResolveError on failure.
*/
using ResolveResult =
mozilla::Result<mozilla::NotNull<nsCOMPtr<nsIURI>>, ResolveError>;
} // namespace JS::loader
#endif // js_loader_ResolveResult_h