ImportMap.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. /*
  2. * Copyright (c) 2022, networkException <networkexception@serenityos.org>
  3. * Copyright (c) 2024, Jamie Mansfield <jmansfield@cadixdev.org>
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include <AK/HashMap.h>
  9. #include <LibURL/URL.h>
  10. #include <LibWeb/WebIDL/ExceptionOr.h>
  11. namespace Web::HTML {
  12. using ModuleSpecifierMap = HashMap<ByteString, Optional<URL::URL>>;
  13. // https://html.spec.whatwg.org/multipage/webappapis.html#import-map
  14. class ImportMap {
  15. public:
  16. ImportMap() = default;
  17. ModuleSpecifierMap const& imports() const { return m_imports; }
  18. ModuleSpecifierMap& imports() { return m_imports; }
  19. void set_imports(ModuleSpecifierMap const& imports) { m_imports = imports; }
  20. HashMap<URL::URL, ModuleSpecifierMap> const& scopes() const { return m_scopes; }
  21. HashMap<URL::URL, ModuleSpecifierMap>& scopes() { return m_scopes; }
  22. void set_scopes(HashMap<URL::URL, ModuleSpecifierMap> const& scopes) { m_scopes = scopes; }
  23. private:
  24. ModuleSpecifierMap m_imports;
  25. HashMap<URL::URL, ModuleSpecifierMap> m_scopes;
  26. };
  27. WebIDL::ExceptionOr<ImportMap> parse_import_map_string(JS::Realm& realm, ByteString const& input, URL::URL base_url);
  28. WebIDL::ExceptionOr<Optional<DeprecatedFlyString>> normalise_specifier_key(JS::Realm& realm, DeprecatedFlyString specifier_key, URL::URL base_url);
  29. WebIDL::ExceptionOr<ModuleSpecifierMap> sort_and_normalise_module_specifier_map(JS::Realm& realm, JS::Object& original_map, URL::URL base_url);
  30. WebIDL::ExceptionOr<HashMap<URL::URL, ModuleSpecifierMap>> sort_and_normalise_scopes(JS::Realm& realm, JS::Object& original_map, URL::URL base_url);
  31. }