internal List ParseMappings()

in src/SourcemapToolkit.SourcemapParser/MappingListParser.cs [202:238]


		internal List<MappingEntry> ParseMappings(string mappingString, IReadOnlyList<string> names, IReadOnlyList<string> sources)
		{
			List<MappingEntry> mappingEntries = new List<MappingEntry>();
			MappingsParserState currentMappingsParserState = new MappingsParserState();

			// The V3 source map format calls for all Base64 VLQ segments to be seperated by commas.
			// Each line of generated code is separated using semicolons. The count of semicolons encountered gives the current line number.
			string[] lines = mappingString.SplitFast(';');

			for (int lineNumber = 0; lineNumber < lines.Length; lineNumber++)
			{
				// The only value that resets when encountering a semicolon is the starting column.
				currentMappingsParserState = new MappingsParserState(
					currentMappingsParserState,
					newGeneratedLineNumber: lineNumber,
					newGeneratedColumnBase: 0);

				string[] segmentsForLine = lines[lineNumber].Split(LineDelimiter, StringSplitOptions.RemoveEmptyEntries);

				foreach (string segment in segmentsForLine)
				{
					// Reuse the numericMappingEntry to ease GC allocations.
					NumericMappingEntry numericMappingEntry = ParseSingleMappingSegment(Base64VlqDecoder.Decode(segment), currentMappingsParserState);
					mappingEntries.Add(numericMappingEntry.ToMappingEntry(names, sources));

					// Update the current MappingParserState based on the generated MappingEntry
					currentMappingsParserState = new MappingsParserState(
						currentMappingsParserState,
						newGeneratedColumnBase: numericMappingEntry.GeneratedColumnNumber,
						newSourcesListIndexBase: numericMappingEntry.OriginalSourceFileIndex,
						newOriginalSourceStartingLineBase: numericMappingEntry.OriginalLineNumber,
						newOriginalSourceStartingColumnBase: numericMappingEntry.OriginalColumnNumber,
						newNamesListIndexBase: numericMappingEntry.OriginalNameIndex);
				}
			}
			return mappingEntries;
		}