in src/SourcemapToolkit.SourcemapParser/SourceMap.cs [123:191]
public SourceMap ApplySourceMap(SourceMap submap, string sourceFile = null)
{
if (submap == null)
{
throw new ArgumentNullException(nameof(submap));
}
if (sourceFile == null)
{
if (submap.File == null)
{
throw new Exception($"{nameof(ApplySourceMap)} expects either the explicit source file to the map, or submap's 'file' property");
}
sourceFile = submap.File;
}
HashSet<string> sources = new HashSet<string>(StringComparer.Ordinal);
HashSet<string> names = new HashSet<string>(StringComparer.Ordinal);
List<MappingEntry> parsedMappings = new List<MappingEntry>(this.ParsedMappings.Count);
// transform mappings in this source map
foreach (MappingEntry mappingEntry in this.ParsedMappings)
{
MappingEntry newMappingEntry = mappingEntry;
if (mappingEntry.OriginalFileName == sourceFile && mappingEntry.OriginalSourcePosition != SourcePosition.NotFound)
{
MappingEntry? correspondingSubMapMappingEntry = submap.GetMappingEntryForGeneratedSourcePosition(mappingEntry.OriginalSourcePosition);
if (correspondingSubMapMappingEntry != null)
{
// Copy the mapping
newMappingEntry = new MappingEntry(
generatedSourcePosition: mappingEntry.GeneratedSourcePosition,
originalSourcePosition: correspondingSubMapMappingEntry.Value.OriginalSourcePosition,
originalName: correspondingSubMapMappingEntry.Value.OriginalName ?? mappingEntry.OriginalName,
originalFileName: correspondingSubMapMappingEntry.Value.OriginalFileName ?? mappingEntry.OriginalFileName);
}
}
// Copy into "Sources" and "Names"
string originalFileName = newMappingEntry.OriginalFileName;
string originalName = newMappingEntry.OriginalName;
if (originalFileName != null)
{
sources.Add(originalFileName);
}
if (originalName != null)
{
names.Add(originalName);
}
parsedMappings.Add(newMappingEntry);
}
SourceMap newSourceMap = new SourceMap(
version: Version,
file: File,
mappings: default,
sources: sources.ToList(),
names: names.ToList(),
parsedMappings: parsedMappings,
new List<string>());
return newSourceMap;
}