public SourceMap ApplySourceMap()

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;
		}