resolve a potential path_alias to its absolutely referenced path from an import_map.
if the input path_alias is not a part of the provided import_map, then undefined will be returned.
for further reading on the specifics of what constitutes an import-map, see the documentation of ImportMap.
// aliasing our function for brevity constfn = resolvePathFromImportMap
constmy_import_map = { // non-directory specifiers (i.e. not used for prefixing) "square" :"./module/shapes/square.js", "circle" :"https://example.com/shapes/circle.js", "http://shape.com/square.js" :"https://example.com/shapes/square.js", "./shapes/circle" :"/modules/shapes/circle/",
// directory specifiers (i.e. used for matching prefixing of path alias) "shapes/" :"./module/shapes/", "other-shapes/" :"https://example.com/modules/shapes/", "other-shapes/triangle/" :"file:///C:/Users/illuminati/", "../modules/shapes/" :"/modules/shapes/",
// incorrect import map value. // resolving this key will throw an error because the value should end in a trailing slash, // since the key also ends in a trailing slash. "modules/css/" :"/modules/shapes/css", }
// the following is not resolved because the `"circle"` key in `my_import_map` does not end with a trailing slash, // which is a requirement for matching prefix directories. assertEquals( fn("circle/bold-circle.js", my_import_map), undefined, )
// even though there is no exact match of the non-normalized input path here, // once it is normalized inside of the function, it matches the same key as the previous test's. assertEquals( fn("http://shape.com/lib/../square.js", my_import_map), "https://example.com/shapes/square.js", )
// even relative imports can be thought as path aliases, so long as there is a key for it in `my_import_map`. // moreover, it is permissible for an import-map value to end with a trailing slash, even when its associated key does not. assertEquals( fn("./shapes/circle", my_import_map), "/modules/shapes/circle/", )
// the path alias is matched with the longest key first, // which is why it resolves to a path different from the prior test's key. assertEquals( fn("other-shapes/triangle/doritos.html", my_import_map), "file:///C:/Users/illuminati/doritos.html", )
// the value of the key "modules/css/" is invalid (non-specs compliant), // since it does not end with a trailing slash, whereas the key does end with one. assertThrows(() => { fn("modules/css/cicle.css", my_import_map) })
resolve a potential
path_alias
to its absolutely referenced path from animport_map
. if the inputpath_alias
is not a part of the providedimport_map
, thenundefined
will be returned.for further reading on the specifics of what constitutes an import-map, see the documentation of ImportMap.
Example