diff --git a/source-map.bs b/source-map.bs index 0b554e6..3e43322 100644 --- a/source-map.bs +++ b/source-map.bs @@ -184,7 +184,7 @@ character. sourceRoot an optional source root, useful for relocating source files on a server or removing repeated values in the [=sources=] entry. This value is prepended to the individual entries in the -"source" field. +[=sources=] field (see [[#resolving-sources]]). sources is a list of original sources used by the [=mappings=] entry. Each entry is either a string that is a @@ -192,15 +192,15 @@ used by the [=mappings=] entry. Each entry is either a string that is a sourcesContent an optional list of source content (that is the [=Original Source=]), useful when the "source" -can't be hosted. The contents are listed in the same order as the [=sources=]. +can't be hosted. The contents are listed in the same order as [=sources=]. `null` may be used if some original sources should be retrieved by name. names a list of symbol names used by the [=mappings=] entry. mappings a string with the encoded mapping data (see [[#mappings-structure]]). -ignoreList an optional list of indices of files that -should be considered third party code, such as framework code or bundler-generated code. This +ignoreList an optional list of indices of files that +should be considered third party code, such as framework code or bundler-generated code. This allows developer tools to avoid code that developers likely don't want to see or step through, without requiring developers to configure this beforehand. It refers to the [=sources=] array and lists the indices of all the known third-party sources @@ -248,8 +248,20 @@ using Google Calendar. Resolving Sources {#resolving-sources} -------------------------------------- -If the sources are not absolute URLs after prepending the [=sourceRoot=], the sources are -resolved relative to the SourceMap (like resolving the script `src` attribute in an HTML document). +To resolve a source given a [=URL=] |sourceMappingUrl|, a string or null |source|, and +an optional [=sourceRoot=] |sourceRoot|, run the following steps: + +1. If |source| is null, then: + 1. Set |source| to "". +1. If |sourceRoot| is null, then: + 1. Let |href| be |source| +1. Otherwise, + 1. If |sourceRoot| does not end with a U+002F (/) char, then: + 1. Append U+002f (/) to |sourceRoot|. + 1. Let |href| be |sourceRoot| and |source| concatenated. +1. If |sourceMappingUrl|'s [=url/scheme=] is "data", then: + 1. Return |href|. +1. Return the result of running [=basic URL parser=] on |href| with |sourceMappingUrl|. Extensions {#extensions} ------------------------ @@ -419,7 +431,7 @@ TypeScript -> JavaScript -> minified JavaScript, resulting in multiple translati final source map is created. This problem can be handled in one of two ways. The easy but lossy way is to ignore the intermediate steps in the process for the purposes of debugging, the source location information from the translation is either ignored (the intermediate -translation is considered the “Original Source”) or the source location information is carried +translation is considered the "Original Source") or the source location information is carried through (the intermediate translation hidden). The more complete way is to support multiple levels of mapping: if the Original Source also has a source map reference, the user is given the choice of using that as well.