Home / File/ decode_sourcemap.js — svelte Source File

decode_sourcemap.js — svelte Source File

Architecture documentation for decode_sourcemap.js, a javascript file in the svelte codebase. 1 imports, 1 dependents.

File javascript Compiler Transformer 1 imports 1 dependents 2 functions

Entity Profile

Dependency Diagram

graph LR
  1351e89f_1c35_8e97_8067_5913392f2985["decode_sourcemap.js"]
  10d5cc0f_edd6_3617_3c00_d2efb24fb338["sourcemap-codec"]
  1351e89f_1c35_8e97_8067_5913392f2985 --> 10d5cc0f_edd6_3617_3c00_d2efb24fb338
  ccf6927a_1f1b_1dda_8616_80903a72ba16["index.js"]
  ccf6927a_1f1b_1dda_8616_80903a72ba16 --> 1351e89f_1c35_8e97_8067_5913392f2985
  style 1351e89f_1c35_8e97_8067_5913392f2985 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

/** @import { Processed } from './public.js' */
import { decode as decode_mappings } from '@jridgewell/sourcemap-codec';

/**
 * Import decoded sourcemap from mozilla/source-map/SourceMapGenerator
 * Forked from source-map/lib/source-map-generator.js
 * from methods _serializeMappings and toJSON.
 * We cannot use source-map.d.ts types, because we access hidden properties.
 * @param {any} generator
 */
function decoded_sourcemap_from_generator(generator) {
	let previous_generated_line = 1;
	/** @type {number[][][]} */
	const converted_mappings = [[]];
	let result_line = converted_mappings[0];
	let result_segment;
	let mapping;
	const source_idx = generator._sources
		.toArray()
		// @ts-ignore
		.reduce((acc, val, idx) => ((acc[val] = idx), acc), {});
	const name_idx = generator._names
		.toArray()
		// @ts-ignore
		.reduce((acc, val, idx) => ((acc[val] = idx), acc), {});
	const mappings = generator._mappings.toArray();
	for (let i = 0, len = mappings.length; i < len; i++) {
		mapping = mappings[i];
		if (mapping.generatedLine > previous_generated_line) {
			while (mapping.generatedLine > previous_generated_line) {
				converted_mappings.push([]);
				previous_generated_line++;
			}
			result_line = converted_mappings[mapping.generatedLine - 1]; // line is one-based
		} else if (i > 0) {
			const previous_mapping = mappings[i - 1];
			if (
				// sorted by selectivity
				mapping.generatedColumn === previous_mapping.generatedColumn &&
				mapping.originalColumn === previous_mapping.originalColumn &&
				mapping.name === previous_mapping.name &&
				mapping.generatedLine === previous_mapping.generatedLine &&
				mapping.originalLine === previous_mapping.originalLine &&
				mapping.source === previous_mapping.source
			) {
				continue;
			}
		}
		result_line.push([mapping.generatedColumn]);
		result_segment = result_line[result_line.length - 1];
		if (mapping.source != null) {
			result_segment.push(
				...[source_idx[mapping.source], mapping.originalLine - 1, mapping.originalColumn]
			);
			if (mapping.name != null) {
				result_segment.push(name_idx[mapping.name]);
			}
		}
	}

	/**
	 * @type {{
	 *  version: number;
	 * sources: string[];
	 * names: string[];
	 * mappings: number[][][];
	 * file?: string;
	 * }}
	 */
	const map = {
		version: generator._version,
		sources: generator._sources.toArray(),
		names: generator._names.toArray(),
		mappings: converted_mappings
	};
	if (generator._file != null) {
		map.file = generator._file;
	}
	// not needed: map.sourcesContent and map.sourceRoot
	return map;
}

/**
 * @param {Processed} processed
 */
export function decode_map(processed) {
	let decoded_map = typeof processed.map === 'string' ? JSON.parse(processed.map) : processed.map;
	if (typeof decoded_map.mappings === 'string') {
		decoded_map.mappings = decode_mappings(decoded_map.mappings);
	}
	if (decoded_map._mappings && decoded_map.constructor.name === 'SourceMapGenerator') {
		// import decoded sourcemap from mozilla/source-map/SourceMapGenerator
		decoded_map = decoded_sourcemap_from_generator(decoded_map);
	}
	return decoded_map;
}

Domain

Subdomains

Dependencies

  • sourcemap-codec

Frequently Asked Questions

What does decode_sourcemap.js do?
decode_sourcemap.js is a source file in the svelte codebase, written in javascript. It belongs to the Compiler domain, Transformer subdomain.
What functions are defined in decode_sourcemap.js?
decode_sourcemap.js defines 2 function(s): decode_map, decoded_sourcemap_from_generator.
What does decode_sourcemap.js depend on?
decode_sourcemap.js imports 1 module(s): sourcemap-codec.
What files import decode_sourcemap.js?
decode_sourcemap.js is imported by 1 file(s): index.js.
Where is decode_sourcemap.js in the architecture?
decode_sourcemap.js is located at packages/svelte/src/compiler/preprocess/decode_sourcemap.js (domain: Compiler, subdomain: Transformer, directory: packages/svelte/src/compiler/preprocess).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free